#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