00_*_*_00 4 python list dataframe pandas
我有一个数据框和一个列表
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
Run Code Online (Sandbox Code Playgroud)
我希望在数据帧的每一行中都有一个列表作为元素.如果我喜欢这里,
df['C'] = mylist
Run Code Online (Sandbox Code Playgroud)
Pandas试图每行播放一个值,所以我得到一个错误Length of values does not match length of index
.
A B C
0 1 4 [10,20,40,50]
1 2 5 [10,20,40,50]
2 3 6 [10,20,40,50]
Run Code Online (Sandbox Code Playgroud)
这是另一个解决方案。它以“Python方式”使用lambda
和做事。我认为它更容易阅读。
import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
df['combined'] = df.apply(lambda x: mylist, axis=1)
df
Run Code Online (Sandbox Code Playgroud)
使用的一种替代方法np.tile
:
df['C'] = np.tile(mylist, (len(df),1)).tolist()
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
Run Code Online (Sandbox Code Playgroud)
?
首先,我认为list
在大熊猫中使用s并不是一个好主意.
但是有可能通过列表理解:
df['C'] = [mylist for i in df.index]
#another solution
#df['C'] = pd.Series([mylist] * len(df))
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
Run Code Online (Sandbox Code Playgroud)
只是为了用 df.assign 完成我之前的回答,借用了 @jezrael 的列表理解
>>> df
A B
0 1 4
1 2 5
2 3 6
>>> df.assign(C = [mylist for i in df.index])
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
Run Code Online (Sandbox Code Playgroud)
或者,永久添加到 DataFrame
df = df.assign(C = [mylist for i in df.index])
Run Code Online (Sandbox Code Playgroud)
另一种方法是用 df.insert
由于我们指定列的顺序,因此可以通过在索引 2 处插入来使用插入(因此应该是数据框中的第三列)
>>> df.insert(2, 'C', '[10, 20, 30, 40, 50]') # directly assigning the list
>>> df
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2070 次 |
最近记录: |