我有一个.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]
我需要用,
分隔后应用爆炸
答案 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')