我有一个数据框
这里我有一个名为" name split"这是一个列表列。 现在我想拆分列表的内容并为每个列创建单独的列。
这是我到目前为止所尝试的:
df = pd.read_csv("C:/Users/Transorg-PC/Desktop/Training/py/datase/football.csv")
temp = df.copy()
temp['name'] = temp['name'].apply(lambda x: ' '.join(x.split()))
temp['name split'] = temp['name'].apply(lambda x: x.split())
temp['length'] = temp['name split'].str.len()
for i in range(temp['length'].max()-1):
temp[i] = temp['name split'].apply(lambda x:x[i])
但我无法像这样迭代,因为在某些情况下索引超出范围。 那么如何在单独的列中拆分列表的内容。
答案 0 :(得分:2)
来自jpp的数据
pd.concat([df,pd.DataFrame(df.name.tolist())],1)
Out[1596]:
A name 0 1
0 1 [1, 2] 1 2
1 1 [3, 4] 3 4
2 2 [5, 6] 5 6
更新
df=pd.DataFrame([[1,[1, 2]],
[1,[3, 4]],
[2,[5, 6,1,1]]],
columns=['A','name'])
pd.concat([df,pd.DataFrame(df.name.tolist())],1)
Out[1602]:
A name 0 1 2 3
0 1 [1, 2] 1 2 NaN NaN
1 1 [3, 4] 3 4 NaN NaN
2 2 [5, 6, 1, 1] 5 6 1.0 1.0
答案 1 :(得分:2)
这是一种方式:
df = pd.DataFrame([[1,[1, 2, 3]],
[1,[3, 4]],
[2,[5, 6, 7, 8]]],
columns=['A','name'])
df = df.join(pd.DataFrame(df['name'].tolist()))
# A name 0 1 2 3
# 0 1 [1, 2, 3] 1.0 2.0 3.0 NaN
# 1 1 [3, 4] 3.0 4.0 NaN NaN
# 2 2 [5, 6, 7, 8] 5.0 6.0 7.0 8.0
答案 2 :(得分:0)
列表推导在以下情况下很有用:
temp['name'] = temp['name'].apply(lambda x: ' '.join(x.split()))
temp['Name1'] = [item.split()[0] for item in temp['name']]
temp['Name2'] = [item.split()[1] for item in temp['name']]
编辑:注意到在进行拆分后,每个条目都有不同数量的项目。您需要决定如何处理这个问题 - 您希望如何填充新列中的空行?添加空字符串或NaN?我假设这就是你得到IndexError
的原因如果你想在每一行中使用不同数量的项目,这段代码将为你处理。虽然,我会考虑为什么你想要这些非均匀的列,如果没有更简洁的方法来实现你的目标。
temp['name_split'] = temp['name'].apply(lambda a: a.split())
max_len = max(temp['name_split'].apply(len))
for ii in range(max_len):
temp['Name%s'%ii] = [item[ii] if ii < len(item) else 'blank' for item in temp['name_split']]