熊猫将空的对象列添加到数据框[重复]
Posted
技术标签:
【中文标题】熊猫将空的对象列添加到数据框[重复]【英文标题】:Pandas adding empty column of objects to dataframe [duplicate] 【发布时间】:2018-12-14 14:27:02 【问题描述】:How to add an empty column to a dataframe?
这已经部分覆盖了。
接受的答案中的dtype of df["D"] = np.nan
是dtype=numpy.float64
。
有没有办法在每个单元格中初始化一个空列表?
试过df["D"] = [[]] * len(df)
,但所有值都指向同一个对象,将一个值设置为一个值会将它们全部设置。
df = pd.DataFrame("A": [1,2,3], "B": [2,3,4])
df
A B
0 1 2
1 2 3
2 3 4
df["D"] = [[]] * len(df)
df
A B D
0 1 2 []
1 2 3 []
2 3 4 []
df['D'][1].append(['a','b','c','d'])
df
A B D
0 1 2 [[a, b, c, d]]
1 2 3 [[a, b, c, d]]
2 3 4 [[a, b, c, d]]
想要
A B D
0 1 2 []
1 2 3 [[a, b, c, d]]
2 3 4 []
【问题讨论】:
【参考方案1】:使用
df["D"] = [[] for _ in range(len(df))]
而不是
df["D"] = [[]] * len(df)
这样您将为每一行创建一个不同的[]
。
基本上[[] for _ in range(len(df))]
是list comprehension. 它为range(len(df))
中的每个值创建一个[]
。
此代码与
具有相同的功能l = []
for _ in range(len(df)):
l.append([])
但明显更快,更简单写起来,甚至更具可读性。
如果您想进一步了解列表推导,我推荐the answers for this question。
如果您想进一步了解为什么会在执行[[]] * len(df)
时发生这种行为,我建议您使用the answers for this question
【讨论】:
感谢这确实有效,您能否解释一下您做了什么以使我理解? @Joylove 当然 :) 我已经编辑了 下划线只是变量名。可能是i
、j
或任何其他名称。如果你不打算使用它,命名变量 _
只是一个约定
哪一行会引发此警告? df["D"] = [[] for _ in range(len(df))]
不会发出此警告。【参考方案2】:
在创建列时,您不能只传递一个列表列表吗?然后将列表值分配给一个临时变量,接下来使用 loc 将该列表分配给数据框中的一个字段
import pandas as pd
df = pd.DataFrame()
df['col A'] = [1,12,312,352]
df['col B'] = [[],[],[],[]]
ser = [1,4,5,6]
df.loc[2,'col B'] = ser
df
输出:
这有帮助吗?这是你要找的吗?
【讨论】:
抱歉更新了一行,发现有错别字 当我遍历我的代码时,df 的行数会有所不同,因此在您的示例中 df['col B'] 无法使用固定长度的数据进行初始化。 然后使用@RafaelC 建议的代码在初始化列时效果最好。是吗? 太棒了。干杯以上是关于熊猫将空的对象列添加到数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章