我有一个Pandas DataFrame。其列之一是列表列表。
执行以下操作的最佳方法是什么:
答案 0 :(得分:1)
有很多原因不应该在Pandas系列对象中使用列表。您的第一个调用端口应该是提取字符串并将系列转换为分类数据:
df = pd.DataFrame({'A': [[], ['steel'], ['steel'], [], ['tarmac'], []]})
df['A'] = df['A'].str[0].fillna('other').astype('category')
print(df)
A
0 other
1 steel
2 steel
3 other
4 tarmac
5 other
如果您坚持通过Python级别的循环使用低效且不可向量化的操作,则可以通过以下方式实现所需的目标:
df['A'] = df['A'].str[0].fillna('other').apply(lambda x: [x])
print(df)
A
0 [other]
1 [steel]
2 [steel]
3 [other]
4 [tarmac]
5 [other]
在这一点上,无法使用分类数据,因为分类列表不支持一系列列表,因为list
不可散列。
答案 1 :(得分:1)
IIUC
df.A=[x if x else ['other'] for x in df.A ]
df
Out[298]:
A
0 [other]
1 [steel]
2 [steel]
3 [other]
4 [tarmac]
5 [other]
答案 2 :(得分:0)
另一个技巧:
>>> df
A
0 []
1 [steel]
2 [steel]
3 []
4 [tarmac]
5 []
>>> df.A.apply(lambda y: "[other]" if len(y)==0 else y)
0 [other]
1 [steel]
2 [steel]
3 [other]
4 [tarmac]
5 [other]
Name: A, dtype: object
OR:
>>> df['A'].apply(lambda x: x if x else ['other'])
0 [other]
1 [steel]
2 [steel]
3 [other]
4 [tarmac]
5 [other]
Name: A, dtype: object