Python 熊猫将列的列表元素的值分布到n个不同的列中
我有一个Pandas DataFrame,它包含一个列名RecentDelays,其中包含一个元素列表。 需要将此RecentDelays列拆分为N个不同的列,例如Delay1、Delay2等。列表的第一个值位于对应行的Delay1列中,第二个值位于对应行的Delay2列中,依此类推。如果没有第N个值,则应为NaN以下是一种方法:Python 熊猫将列的列表元素的值分布到n个不同的列中,python,pandas,data-science,data-cleaning,Python,Pandas,Data Science,Data Cleaning,我有一个Pandas DataFrame,它包含一个列名RecentDelays,其中包含一个元素列表。 需要将此RecentDelays列拆分为N个不同的列,例如Delay1、Delay2等。列表的第一个值位于对应行的Delay1列中,第二个值位于对应行的Delay2列中,依此类推。如果没有第N个值,则应为NaN以下是一种方法: import pandas as pd d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[
import pandas as pd
d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[1,2]]})
# Expand column into temporary Dataframe
d2 = d1['Delays'].apply(pd.Series)
# Integrate temp columns back into original Dataframe (while naming column)
for col in d2:
d1["Delay%d" % (col+1)] = d2[col]
print(d1)
之前:
Airline Delays
0 A []
1 B [1]
2 C [1, 2]
然后使用concat
您还可以使用以下内容删除现在扩展的延迟列:
d1.drop(columns=['Delays'], inplace=True) # or,
d1.drop(['Delays'], axis=1, inplace=True)
对于新列,最好使用
DataFrame
constructor,因为.apply(pd.Series)
速度较慢,请检查,最后一个到原始:
#jedwards data sample
d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[1,2]]})
d2 = (pd.DataFrame(d1['Delays'].values.tolist(), index=d1.index)
.rename(columns = lambda x: 'Delay{}'.format(x+1)))
df = d1.join(d2)
print (df)
Airline Delays Delay1 Delay2
0 A [] NaN NaN
1 B [1] 1.0 NaN
2 C [1, 2] 1.0 2.0
如果需要删除列,请首先使用:
能否添加输入数据的样本?请将数据框作为文本而不是图像发布。RecentDelays[23,47][[24,43,87]
d1.drop(columns=['Delays'], inplace=True) # or,
d1.drop(['Delays'], axis=1, inplace=True)
#jedwards data sample
d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[1,2]]})
d2 = (pd.DataFrame(d1['Delays'].values.tolist(), index=d1.index)
.rename(columns = lambda x: 'Delay{}'.format(x+1)))
df = d1.join(d2)
print (df)
Airline Delays Delay1 Delay2
0 A [] NaN NaN
1 B [1] 1.0 NaN
2 C [1, 2] 1.0 2.0
d2 = (pd.DataFrame(d1.pop('Delays').values.tolist(), index=d1.index)
.rename(columns = lambda x: 'Delay{}'.format(x+1)))
df = d1.join(d2)
print (df)
Airline Delay1 Delay2
0 A NaN NaN
1 B 1.0 NaN
2 C 1.0 2.0