gpt4 book ai didi

Python pandas将列表插入单元格

转载 作者:IT老高 更新时间:2023-10-28 21:33:56 25 4
gpt4 key购买 nike

我有一个列表“abc”和一个数据框“df”:

abc = ['foo', 'bar']
df =
A B
0 12 NaN
1 23 NaN

我想将列表插入单元格 1B,所以我想要这个结果:

    A  B
0 12 NaN
1 23 ['foo', 'bar']

我可以这样做吗?

1) 如果我使用这个:

df.ix[1,'B'] = abc

我收到以下错误消息:

ValueError: Must have equal len keys and value when setting with an iterable

因为它试图将列表(包含两个元素)插入行/列而不是单元格。

2) 如果我使用这个:

df.ix[1,'B'] = [abc]

然后它会插入一个列表,其中只有一个元素是“abc”列表 ([['foo', 'bar']])。

3) 如果我使用这个:

df.ix[1,'B'] = ', '.join(abc)

然后它插入一个字符串:( foo, bar ) 但不是一个列表。

4) 如果我使用这个:

df.ix[1,'B'] = [', '.join(abc)]

然后它会插入一个列表,但它只有一个元素( ['foo, bar'] ),但没有我想要的两个元素( ['foo', 'bar'] )。

感谢您的帮助!


编辑

我的新数据框和旧列表:

abc = ['foo', 'bar']
df2 =
A B C
0 12 NaN 'bla'
1 23 NaN 'bla bla'

另一个数据框:

df3 =
A B C D
0 12 NaN 'bla' ['item1', 'item2']
1 23 NaN 'bla bla' [11, 12, 13]

我想将“abc”列表插入 df2.loc[1,'B']和/或 df3.loc[1,'B'] .

如果数据框的列仅包含整数值和/或 NaN 值和/或列表值,则将列表插入单元格可以完美地工作。如果数据框的列仅包含字符串值和/或 NaN 值和/或列表值,则将列表插入单元格可以完美地工作。但是,如果数据框包含具有整数和字符串值的列以及其他列,那么如果我使用它,则会出现错误消息:df2.loc[1,'B'] = abcdf3.loc[1,'B'] = abc .

另一个数据框:

df4 =
A B
0 'bla' NaN
1 'bla bla' NaN

这些插件完美运行:df.loc[1,'B'] = abcdf4.loc[1,'B'] = abc .

最佳答案

由于 set_valuedeprecated从 0.21.0 版开始,您现在应该使用 at .它可以将列表插入单元格,而无需像 loc 那样引发 ValueError。我认为这是因为 at always 引用单个值,而 loc 可以引用值以及行和列。

df = pd.DataFrame(data={'A': [1, 2, 3], 'B': ['x', 'y', 'z']})

df.at[1, 'B'] = ['m', 'n']

df =
A B
0 1 x
1 2 [m, n]
2 3 z

您还需要确保要插入的具有dtype=object。例如

>>> df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [1,2,3]})
>>> df.dtypes
A int64
B int64
dtype: object

>>> df.at[1, 'B'] = [1, 2, 3]
ValueError: setting an array element with a sequence

>>> df['B'] = df['B'].astype('object')
>>> df.at[1, 'B'] = [1, 2, 3]
>>> df
A B
0 1 1
1 2 [1, 2, 3]
2 3 3

关于Python pandas将列表插入单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26483254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com