如何将列表列的列表更改为 pandas DataFrame 中的常规列表?
How do I change a list of lists column into a regular list in a pandas DataFrame?
我有一个 Pandas DataFrame。其中一列是列表列表。
执行以下操作的最佳方法是什么:
- 用单词 'other' 填充 list_of_lists 列中的空列表? 例如[] 应该变成 ['other']
- 将 list_of_lists 列更改为常规分类列表?它最终应该看起来像这样...
您不应该在 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
不可哈希。
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]
另一个技巧:
>>> 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
或:
>>> 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
我有一个 Pandas DataFrame。其中一列是列表列表。
执行以下操作的最佳方法是什么:
- 用单词 'other' 填充 list_of_lists 列中的空列表? 例如[] 应该变成 ['other']
- 将 list_of_lists 列更改为常规分类列表?它最终应该看起来像这样...
您不应该在 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
不可哈希。
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]
另一个技巧:
>>> 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
或:
>>> 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