Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 在数据实际上不是列表的地方使用熊猫分解_Python_Pandas_Dataframe - Fatal编程技术网

Python 在数据实际上不是列表的地方使用熊猫分解

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中的某些索引,列值是一个列表。然而,pandas并不是这样读取数据,而是作为一个碰巧包含逗号的字符串。(以下MRE中的示例)

我最终想做的是使用
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