我有一个Python Pandas dataframe df:
d = [['hello', 1, 'GOOD', 'long.kw'],
[1.2, 'chipotle', np.nan, 'bingo'],
['various', np.nan, 3000, 123.456]]
t = pd.DataFrame(data=d, columns=['A','B','C','D'])
字符串
看起来像这样:
print(t)
A B C D
0 hello 1 GOOD long.kw
1 1.2 chipotle NaN bingo
2 various NaN 3000 123.456
型
我尝试创建一个新列,它是A
、B
、C
和D
中的值的list
。所以它看起来像这样:
t['combined']
Out[125]:
0 [hello, 1, GOOD, long.kw]
1 [1.2, chipotle, nan, bingo]
2 [various, nan, 3000, 123.456]
Name: combined, dtype: object
型
我正在尝试这个代码:
t['combined'] = t.apply(lambda x: list([x['A'],
x['B'],
x['C'],
x['D']]),axis=1)
型
返回以下错误:
ValueError: Wrong number of items passed 4, placement implies 1
型
让我感到困惑的是,如果我删除了我想放在列表中的一列(或者向dataframe添加另一列,而我没有添加到列表中),我的代码就可以工作。
例如,运行以下代码:
t['combined'] = t.apply(lambda x: list([x['A'],
x['B'],
x['D']]),axis=1)
型
如果我只需要3列,返回这个值就很完美了:
print(t)
A B C D combined
0 hello 1 GOOD long.kw [hello, 1, long.kw]
1 1.2 chipotle NaN bingo [1.2, chipotle, bingo]
2 various NaN 3000 123.456 [various, nan, 123.456]
型
我完全不知道为什么请求“组合”列表由数据框架中的所有列组成会产生错误,但选择除1列以外的所有列创建“组合”列表的工作效果与预期的一样。
3条答案
按热度按时间thigvfpy1#
试试这个:
字符串
hwazgwia2#
另一种方法是在底层numpy数组上调用
list()
字符串
应该注意的是,这产生的柱与使用
.tolist()
略有不同。从下面可以看出,tolist()
创建了一个嵌套列表,而list()
创建了一个数组列表。型
根据使用情况,保留ndarray类型有时会很有用。
如果你想合并列而不带NaN值,那么最快的方法是在检查NaN值的同时循环遍历行。与
NaN!=NaN
一样,最快的检查是检查一个值是否等于它本身。型
更完整的检查是使用内置
math
模块中的isnan
。型
要合并非NaN值的特定列,请首先选择列:
型
qnakjoqk3#
这里有一个方法与NaN
字符串
输出量:
型
这里有一个没有NaN的方法
型
输出量:
型