首页 > 编程问答 >有没有办法从列表创建单列 pandas DataFrame 而无需复制列表?

有没有办法从列表创建单列 pandas DataFrame 而无需复制列表?

时间:2024-07-30 10:46:17浏览次数:4  
标签:python list pandas

假设我有这样的代码:

import pandas as pd

mylist = [item for item in range(100000)]
df = pd.DataFrame()
df["col1"] = mylist

中的数据在赋值给 mylist 时是否被复制了?如果是这样,有没有办法避免这种复制? df["col1"] 编辑:在这种情况下,我的列表是字符串列表。我从这些答案中得到的一件事是,如果我创建这些字符串的 numpy 数组,我调用

时不会发生数据重复? df["col1"] = mynparray ?


在提供的代码中,将 mylist 分配给 df["col1"] 时, 发生数据复制。这是因为 Pandas DataFrames 被设计为保存数据的自身副本以实现数据完整性和可预测行为。

但是,可以使用多种方法避免这种复制:

1. 使用 pd.Series 构造函数

可以使用 pd.Series 构造函数直接从列表创建 Pandas Series,然后将该 Series 分配给 DataFrame 列。这比创建空 DataFrame 然后分配列更有效。

import pandas as pd

mylist = [item for item in range(100000)]
df = pd.DataFrame({"col1": pd.Series(mylist, copy=False)})

使用 copy=False 参数指示 Pandas 在可能的情况下避免复制数据。但是,如果基础数据不是兼容的 dtype(例如,Python 字符串列表),Pandas 可能仍会为了类型一致性创建副本。

2. 使用 NumPy 数组和 share()

如果处理的是字符串以外的数字数据,则可以创建一个 NumPy 数组并将 share() 方法用于其基础数据缓冲区。这将创建一个共享相同底层数据的视图,从而避免复制。

import pandas as pd
import numpy as np

mynparray = np.arange(100000)
df = pd.DataFrame({"col1": mynparray.share(name="col1")})

这将创建一个 DataFrame,其中“col1”列与 NumPy 数组共享数据缓冲区,从而防止复制。

3. 使用 from_records()

如果的数据已经是列表列表或 NumPy 数组,则可以使用 from_records() 方法创建一个 DataFrame 并将 copy=False 传递给它。

import pandas as pd

data = [[item] for item in range(100000)]
df = pd.DataFrame.from_records(data, columns=["col1"], copy=False)

这将创建一个 DataFrame,该 DataFrame 使用提供的列表作为其数据,而不进行复制。

对于的字符串列表情况:

创建这些字符串的 NumPy 数组并将该数组分配给 df["col1"] 不会复制字符串数据本身 。这是因为 NumPy 数组可以保存对对象的引用,例如字符串。但是,Pandas DataFrame 仍将存储对 NumPy 数组的引用,这意味着数据本身存在于 DataFrame 之外。

重要的是要注意,避免复制并不总是最好的选择。如果需要修改原始列表或 NumPy 数组,同时保持 DataFrame 中数据的完整性,则允许 DataFrame 创建数据副本会更安全。

标签:python,list,pandas
From: 51329934

相关文章

  • python读取大型二进制文件最有效的方法是什么
    我有一个大(21GB)文件,我想将其读入内存,然后传递给一个子例程,该子例程对我透明地处理数据。我在Centos6.5上使用python2.6.6,因此无法升级操作系统或python。目前,我正在使用f=open(image_filename,"rb")image_file_contents=f.read()f.close()transparent_subrout......
  • 易优CMS模板标签asklist问答列表
    asklist内置问答列表标签[基础用法]标签:asklist描述:在首页、列表、内容页调用内置问答模型的提问列表用法:{eyou:asklistid='field'row='20'}问题标题:{$field.ask_title|html_msubstr=###,0,30,true}问题链接:{$field.ask_url}问题内容:{$field.content|htm......
  • Python:为列表中的每个类对象创建一个不同的副本
    如何制作Python类中对象列表的副本,以便每个副本都是所述Python类的不同实例?假设我有一个Python类classmyClass():def__init__(self,neighbor):self.neighbor=neighbor另外假设myList=[a,b,c,d,...]是一个列表myClass对......
  • 需要使用Python代码将一个文件的一部分复制到另一个文件的相同但空的部分
    例如:需要将文件A中第1部分的x、y和z行复制到文件B中括号之间的第1部分。需要帮助,如果给定多个文件,文件A部分1中的行数将是更改,因此总是需要在括号之间复制到括号之间。文件A:Section1{xyz}Section2{abc}文件B:Section1{}S......
  • Open3D点云裁剪-用Python实现高效的点云处理技术
    点云数据是计算机视觉领域中常用的一种数据表示形式,它以三维空间中的离散点集合的方式来描述物体的形状和结构,在点云数据处理过程中,点云裁剪是一项关键任务,它可以帮助我们从原始的点云数据中提取出感兴趣的物体或区域,从而提高数据处理效率和准确性,本文将介绍如何使用Open3D库和......
  • 解决mv cp rm 时文件个数太多Argument list too long报错
    问题今天复制文件时出现“Argumentlisttoolong”的问题,简单理解就是你的目录下文件个数太多了,命令参数太长,执行失败解决方法findceshi/-name"*.html"|xargs-imv{}OCRhtml1解释一下:findceshi/-name".html"是指在源文件夹ceshi下查找名为.html的文件,即所有的html后......
  • Python,计算HSV图像的直方图,忽略背景
    我正在尝试使用openCV计算HSV图像的直方图,使用以下代码:defistogrammaHSV(image,histSize):hsv_planes=cv2.split(image)histSize=histSizehistRange=(0,256)accumulate=Falseh_hist=np.array(cv2.calcHist(hsv_planes,[0],None,[......
  • C# 中List中的Count和Count(),有什么区别
     在C#中,List<T>类有一个属性Count和一个扩展方法Count(),它们虽然在名称上相似,但有明显的区别。List<T>.Count属性定义:Count是List<T>类的一个属性。功能:返回列表中包含的元素的数量。实现:它是一个只读属性,其值是由列表内部维护的一个字段直接返回的。性能:由于它......
  • Pandas 和 Numpy 版本的问题
    我认为有很多冲突。我试图在笔记本中运行一些代码并收到以下消息:ImportError:此版本的pandas与numpy<1.16.5不兼容你的numpy版本是1.16.2。请将numpy升级到>=1.16.5以使用此pandas版本我安装了pandas1.2.2版本。我运行了condaupdaten......
  • python性能分析器:cProfile
    代码:(1)importcProfileimportrecProfile.run('re.compile("foo|bar")')运行结果:(2)importcProfiledefrunRe():importrecProfile.runctx('re.compile("foo|bar")',None,locals())runRe()运行结果:(3)i......