Как использовать условие для заполнения данных? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть такая проблема: DataFrame для этого: http://sigmaquality.pl/wp-content/uploads/2019/03/sample.csv

enter image description here

У меня есть два столбца: почтовый индекс и код страны.У меня есть много пустых ячеек в столбце: код страны.Я знаю, если почтовый индекс имеет маску XX-XXX, это польский код.Поскольку я знаю это, я могу заполнить пустые ячейки символом: «PL». Я не знаю, как это сделать.

Я награждаю всех, кто мне помогает!

Как использовать условие длязаполнить данные?

Ответы [ 4 ]

4 голосов
/ 25 марта 2019

Проверка с np.where с str.contains

df['COUNTRY']=np.where(df['POSTAL_CD'].str.match(r'\d{2}-\d{3}')&df['COUNTRY'].isnull(),'PL',df['COUNTRY'])
4 голосов
/ 25 марта 2019

Используйте groupby и ffill () с bfill ():

df.groupby('POSTAL_CD').apply(lambda x: x.ffill().bfill())

   Unnamed: 0 POSTAL_CD COUNTRY
0         0.0    33-101      PL
1         1.0    277 32      CZ
2         2.0    72-010      PL
3         3.0    33-101      PL
4         4.0      7700      BE
5         5.0    72-010      PL
6         6.0    33-101      PL
7         7.0     10095      IT
8         8.0    33-101      PL
9         9.0    33-101      PL
2 голосов
/ 25 марта 2019

Как насчет использования loc indexer , как показано здесь .

df = pd.read_csv("sample.csv", sep=",", index_col=0)
df.loc[df["POSTAL_CD"].str.contains("-", na=False), "COUNTRY"] = "PL"
1 голос
/ 25 марта 2019

Когда я писал этот код, я считал, что вам нужна маска с [two digits]-[three digits] для почтовых индексов, а не просто черточка внутри или непустое поле.

import re
import csv

# Compile our regexp
regexp = re.compile(r'[0-9]{2}-[0-9]{3}')

# Read the CSV and load it into memory
reader = csv.DictReader(open('sample.csv'))
table = list(reader)

# Iterate for rows
for row in table:
    # Check if the postal code is fit to our regexp
    if regexp.match(row['POSTAL_CD']):
        row['COUNTRY'] = 'PL'

# Write the result
with open('result.csv', 'w') as f:
    writer = csv.DictWriter(f, fieldnames=['', 'POSTAL_CD', 'COUNTRY'])
    writer.writeheader()
    writer.writerows(table)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...