如何在给定的数据帧中划分列“位置”?

时间:2018-09-29 11:31:38

标签: python string python-3.x pandas dataframe

我正在处理将列命名为标题的数据集。该值如上所述。

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']

2 个答案:

答案 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列(城市,州和国家/地区),我不明白为什么要使用重复项。