所以我需要组装一个pandas series'的字典,我想知道是否只是传递一个对该系列的引用而不是将所有数据复制到字典中会更快。我有代码:
df = pd.read_csv('data.csv')
dict = {
'Start' : df['Start']
}
print(dict.get('Start'))
我试图改变数据,看看它是否在复制数据,所以我做了
dict = {
'Start' : df['Start']
}
df['Start'] = df['End']
print(dict.get('Start'))
,但这根本没有改变代码的输出,显示字典包含该系列的副本。我认为这将比仅仅传递一个引用慢,所以我是否有可能只是给字典中的值分配一个引用?
df['Start'] = df['End']
不是一个可靠的测试方法。基本上,pandas
对表示数据框架中的数据的底层缓冲区不做保证(或不做很多保证)。所有这些都依赖于实现细节,块管理器将尝试将内容有效地存储在类似类型的块中,如果dtypes是同质的,这是可能的,但在异构dtypes
df['Start'] = df['End']
可能会重新安排数据框的表示方式。
测试复制行为的更可靠的方法是修改单个元素而不改变列的类型。假设"Start"
都是整数
>>> df = pd.DataFrame({"start":[1,2,3], "end":[4,5,6]})
>>> df
start end
0 1 4
1 2 5
2 3 6
>>> d = {'start':df['start']}
>>> df.loc[0, 'start'] = 99
>>> d
{'start': 0 99
1 2
2 3
Name: start, dtype: int64}
但我不确定熊猫对df[column]
的任何保证,但根据我的经验,它总是返回一个视图。然而,它是当时块管理器中底层数据的视图。修改数据框架可以很容易地改变底层缓冲区。