Python 在数据实际上不是列表的地方使用熊猫分解
我有一个从文本文件导入的数据框。文件的组织方式是,某些列包含多个以逗号分隔的数据段。实际上,对于df中的某些索引,列值是一个列表。然而,pandas并不是这样读取数据,而是作为一个碰巧包含逗号的字符串。(以下MRE中的示例) 我最终想做的是使用Python 在数据实际上不是列表的地方使用熊猫分解,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个从文本文件导入的数据框。文件的组织方式是,某些列包含多个以逗号分隔的数据段。实际上,对于df中的某些索引,列值是一个列表。然而,pandas并不是这样读取数据,而是作为一个碰巧包含逗号的字符串。(以下MRE中的示例) 我最终想做的是使用df.explode将这些列展开为单独的行,但首先我需要让pandas将数据识别为一个列表。显然,我可以循环整个df,但这里必须有一个矢量化的解决方案 示例代码: import pandas as pd import numpy as np df_dat
df.explode
将这些列展开为单独的行,但首先我需要让pandas将数据识别为一个列表。显然,我可以循环整个df,但这里必须有一个矢量化的解决方案
示例代码:
import pandas as pd
import numpy as np
df_data = {'Day': ['Mon', 'Tues', 'Weds', 'Thurs', 'Fri', 'Sat', 'Sun'],
'Visit':['MK', ['E', 'DAK'], 'MK',
['DHS', 'E'], 'E', ['DAK', 'DHS', 'E'], 'MK'],
'Visit2':['MK', 'E, DAK', 'MK',
'DHS, E', 'E', 'DAK, DHS, E', 'MK']}
df = pd.DataFrame(data = df_data)
print(df.explode('Visit'))
print(df.explode('Visit2'))
我正在处理的数据看起来像列Visit2
,但我想要的是Visit
或以期望结果结束的其他数据转换:
Day Visit
0 Mon MK
1 Tues E
1 Tues DAK
2 Weds MK
3 Thurs DHS
3 Thurs E
4 Fri E
5 Sat DAK
5 Sat DHS
5 Sat E
6 Sun MK
IIUC,您可以使用
str.split()将就诊2转换为就诊:
当你这样做的时候:
>>> print(df.explode('Visit2'))
Day Visit Visit2
0 Mon MK MK
1 Tues [E, DAK] E
1 Tues [E, DAK] DAK
2 Weds MK MK
3 Thurs [DHS, E] DHS
3 Thurs [DHS, E] E
4 Fri E E
5 Sat [DAK, DHS, E] DAK
5 Sat [DAK, DHS, E] DHS
5 Sat [DAK, DHS, E] E
6 Sun MK MK
# Or drop the column first
>>> print(df.drop('Visit',axis=1).explode('Visit2'))
Day Visit2
0 Mon MK
1 Tues E
1 Tues DAK
2 Weds MK
3 Thurs DHS
3 Thurs E
4 Fri E
5 Sat DAK
5 Sat DHS
5 Sat E
6 Sun MK
>>> print(df.explode('Visit2'))
Day Visit Visit2
0 Mon MK MK
1 Tues [E, DAK] E
1 Tues [E, DAK] DAK
2 Weds MK MK
3 Thurs [DHS, E] DHS
3 Thurs [DHS, E] E
4 Fri E E
5 Sat [DAK, DHS, E] DAK
5 Sat [DAK, DHS, E] DHS
5 Sat [DAK, DHS, E] E
6 Sun MK MK
# Or drop the column first
>>> print(df.drop('Visit',axis=1).explode('Visit2'))
Day Visit2
0 Mon MK
1 Tues E
1 Tues DAK
2 Weds MK
3 Thurs DHS
3 Thurs E
4 Fri E
5 Sat DAK
5 Sat DHS
5 Sat E
6 Sun MK