Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫将列的列表元素的值分布到n个不同的列中_Python_Pandas_Data Science_Data Cleaning - Fatal编程技术网

Python 熊猫将列的列表元素的值分布到n个不同的列中

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],[

我有一个Pandas DataFrame,它包含一个列名RecentDelays,其中包含一个元素列表。

需要将此RecentDelays列拆分为N个不同的列,例如Delay1、Delay2等。列表的第一个值位于对应行的Delay1列中,第二个值位于对应行的Delay2列中,依此类推。如果没有第N个值,则应为NaN

以下是一种方法:

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