如何用delimi拆分列

2024-06-26 00:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.csv,我需要用

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]

我需要在用,分隔之后应用explode


Tags: csvnameimport密码pandasdfreadaddress
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'))

我将您的数据复制并粘贴到一个.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')

相关问题 更多 >