Python 有没有一种方法可以在不复制列表的情况下从列表创建单列数据帧?
假设我有以下代码:Python 有没有一种方法可以在不复制列表的情况下从列表创建单列数据帧?,python,list,pandas,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
import pandas as pd
mylist = [item for item in range(100000)]
df = pd.DataFrame()
df["col1"] = mylist
mylist
中的数据分配给df[“col1”]
时是否被复制?如果是这样,有没有办法避免这种复制
编辑:在本例中,我的列表是字符串列表。从这些答案中我得到的一件事是,如果我改为创建这些字符串的numpy数组,则不会发生数据重复,我调用
df[“col1”]=mynparray
?当您将列表分配给一个系列时,将创建一个新的numpy数组。这种数据结构允许对数值类型进行矢量化计算。这样的系列被放置在连续的内存块中。有关更多详细信息,请参阅
因此,您将需要足够的内存来保存重复的数据。这是不可避免的。无法将列表“转换”为现有的熊猫系列
注意:上述内容与将NumPy数组分配给序列时发生的情况无关。
pd.DataFrame({'col1':mylist})
?df=pd.DataFrame(mylist,columns=[“col1”])
您的预期输出是什么,df中的值不再受mylist
更改的影响?这只是一个浅拷贝
,mylist
中的任何更改都不会影响数据帧df
。但对我来说,显而易见的问题是,这些值是否以数组开头,以及df中的值是否是同一个对象。我正要测试它,但我认为这可能是问题的核心。列表中的值和系列中的值不能是同一个对象。它们不可能是这样的,因为它们必须以完全不同的内存布局进行布局。首先,在float
或int
数组中没有指针,而在Python列表中却有指针<代码>df=pd.数据帧(a)a[0]=15
但是a
不是这里的列表@roganjosh,是的,在我们仔细考虑你的问题时,我已经更新了答案。