我正在处理将列命名为标题的数据集。该值如上所述。
df = pd.DataFrame(data={"location":["düsseldorf, nordrhein-westfalen, germany",
"durbanville , cape town, cape town , south africa"]})
我想在['city', 'state', 'country']
中划分此列。请注意,第二行重复。
我已经尝试了以下方法,但这不能处理重复项:
location = df.location.str.split(', ', n=2, expand=True)
location.columns = ['city', 'state', 'country']
答案 0 :(得分:0)
您可以使用unique_everseen
docs中可用的itertools
配方,该配方也可以在toolz.unique
之类的第三方库中使用。
该逻辑可以合并到迭代df['location']
的列表理解中。这可能比不提供矢量化功能的基于Pandas字符串的方法更为有效。
from toolz import unique
res = pd.DataFrame([list(unique(map(str.strip, i.split(',')))) for i in df['location']])
res.columns = ['city', 'state', 'country']
print(res)
city state country
0 düsseldorf nordrhein-westfalen germany
1 durbanville cape town south africa
答案 1 :(得分:0)
您只能使用pandas
来解决此问题:
import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
data_all=(['düsseldorf', 'nordrhein-westfalen', 'germany', 'durbanville', 'cape town', 'south africa'])
dfe = [[], [], []]
i = 0
j = 1
k = 2
while i < len(data_all):
dfe[0].append(data_all[i])
i += 3
while j < len(data_all):
dfe[1].append(data_all[j])
j += 3
while k < len(data_all):
dfe[2].append(data_all[k])
k += 3
d = {'city': dfe[0], 'state': dfe[1], 'country': dfe[2]}
df = pd.DataFrame(data=d)
print(df)
结果:
city state country
0 düsseldorf nordrhein-westfalen germany
1 durbanville cape town south africa
但是实际上,如果您只有3列(城市,州和国家/地区),我不明白为什么要使用重复项。