Python 如何使用分隔符拆分列

Python 如何使用分隔符拆分列,python,pandas,Python,Pandas,我有一个.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 ------------

我有一个
.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,
您在
地址
列中的数据是一个列表,而不是一个字符串。首先需要访问此列表的第一个元素(字符串),然后进行拆分

# 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
在某些地址项为空的情况下,您可以只处理至少有一个列表项的子集(如果列表中有多个项目,则忽略数据)


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

# 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
在某些地址项为空的情况下,您可以只处理至少有一个列表项的子集(如果列表中有多个项目,则忽略数据)


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

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

很好,为什么我的拆分(df.address=df.address.str.split('\n'))不起作用,对我的方法有什么启发吗?如果列是字符串,那么拆分会起作用。相反,它是一个包含字符串的列表。请注意,
split
返回一个列表。因此,我们访问列表中的第一项(一个字符串),将其拆分,然后获取一个新列表。在原始csv中,我应用的所有列都是字符串。请尝试
df['address'].str.split(r'\\n')
添加ir如果我正在使用您的代码,它工作正常。但是如果我把csv上传到笔记本并执行。同样的问题完美,为什么我的拆分(df.address=df.address.str.split('\n'))不起作用,对我的方法的任何启发如果列是字符串,拆分会起作用。相反,它是一个包含字符串的列表。请注意,
split
返回一个列表。因此,我们访问列表中的第一项(一个字符串),将其拆分,然后获取一个新列表。在原始csv中,我应用的所有列都是字符串。请尝试
df['address'].str.split(r'\\n')
添加ir如果我正在使用您的代码,它工作正常。但是如果我把csv上传到笔记本并执行。同样的问题