Python классифицирует и создает новые столбцы из полных адресов CSV

#python #pandas

#python #панды

Вопрос:

Как классифицировать и создавать новые столбцы из полных адресов?

Строка адреса разделяется запятой и использует эти ключевые слова:

* район

* город

* район

* деревня

* муниципалитет

* округ

Исходный формат полного адреса может выглядеть следующим образом:

 col1;col2;fulladdress
data1_1;data2_1;Some district, Cityname, Some county
data1_2;data2_2;Another village, Another municipality, Another county
data1_3;data2_3;Third city, Third county
data1_4;data2_4;Forth borough, Forth municipality, Forth county
 

В частности, с одним городом есть одна особенность — этот город называется «Clause», и иногда он записывается в формате: «Clause city», а иногда это просто «Clause» в строке полного адреса.

Например:

 Clause city, Third county
Seventh district, Clause, Seventh municipality
 

Итак, я хочу классифицировать только один формат версии, который является «Городом предложений», чтобы избежать дублирования вывода. Итак, если в строке полного адреса есть только «Пункт», его следует переименовать в «Пункт city» в CSV.

Файл исходных данных называется data.csv и экспортируется.csv для категоризированной версии.

Все, что у меня есть, это:

 import pandas as pd
df = pd.read_csv('data.csv', delimiter=';')

address = df.fulladdress.str.split(',', expand=True)

district = df[df.fulladdress.str.match('district')]
city = df[df.fulladdress.str.match('city')]
borough = df[df.fulladdress.str.match('borough')]
village = df[df.fulladdress.str.match('village')]
municipality = df[df.fulladdress.str.match('municipality')]
county = df[df.fulladdress.str.match('county')]

df.to_csv('exported.csv', sep=';', encoding='utf8', index=True)

print ("Done!")
 

Ответ №1:

Если есть только один проблемный город, я думаю, вы могли бы использовать replace?

необработанные данные csv:

 Some district, Cityname, Some county
Another village, Another municipality, Another county
Third city, Third county
Forth borough, Forth municipality, Forth county
Clause city, Third county
Seventh district, Clause, Seventh municipality
 

заменить раствор:

 df = pd.read_csv('clause.csv', names=['district', 'city', 'country'], sep=',')

# need to strip white space for replace to work
df = df.apply(lambda x: x.str.strip())

df.replace('Clause', 'Clause city', inplace=True)
 

выходной сигнал:

     district              city                     country
0   Some district         Cityname                 Some county
1   Another village       Another municipality     Another county
2   Third city            Third county             NaN
3   Forth borough         Forth municipality       Forth county
4   Clause city           Third county             NaN
5   Seventh district      Clause city              Seventh municipality