如何用定界符分割列

时间:2019-10-20 04:41:33

标签: python pandas

我有一个.csv,我需要用\ p分隔\ n

name,address
711-2880,Mankato\n96522\n(257) 563-7401
971-2880,CA\n965\n(01) 563-7401\nNebraska

这是我的代码:

import pandas as pd
df = pd.read_csv('test.csv')
df.address = df.address.str.split('\n')

我的输出:

    name        address
---------------------------------------------------
0   711-2880    [Mankato\n96522\n(257) 563-7401]
1   971-2880    [CA\n965\n(01) 563-7401\nNebraska]

预期输出:

    name        address
---------------------------------------------------
0   711-2880    [Mankato,96522,(257) 563-7401]
1   971-2880    [CA,965,(01) 563-7401,Nebraska]

我需要用,分隔后应用爆炸

2 个答案:

答案 0 :(得分:2)

您在address列中的数据是一个列表,而不是字符串。您首先需要访问此列表的第一个元素(是字符串),然后进行拆分。

# Sample Data:
df = pd.DataFrame({
    "name": ['711-2880', '971-2880'], 
    "address": [['Mankato\n96522\n(257) 563-7401'], ['CA\n965\n(01) 563-7401\nNebraska']]}
)

>>> df['address'].apply(lambda col: col[0].split('\n'))
0      [Mankato, 96522, (257) 563-7401]
1    [CA, 965, (01) 563-7401, Nebraska]
Name: address, dtype: object

如果某些地址条目为空,则可以仅处理具有至少一个列表项的子集(如果列表中有多个项,则忽略数据)。

mask = df['address'].apply(len).gt(0)
df.loc[mask, 'address'] = df.loc[mask, 'address'].apply(lambda col: col[0].split('\n'))

答案 1 :(得分:1)

我将您的数据复制并粘贴到.csv文件中,并按以下方式读取它,然后使用lambda分割地址,如下所示:

import pandas as pd
df = pd.read_csv('file.csv')
df

       name                           address
0  711-2880    Mankato\n96522\n(257) 563-7401
1  971-2880  CA\n965\n(01) 563-7401\nNebraska

df.address = df.address.apply(lambda x: x.split('\\n'))
df

       name                             address
0  711-2880    [Mankato, 96522, (257) 563-7401]
1  971-2880  [CA, 965, (01) 563-7401, Nebraska]

您也可以按照自己的方式进行操作,但是要进行以下更改:

df.address.str.split(r'\\n')