如何使用条件填充数据?

时间:2019-03-25 15:56:10

标签: python pandas dataframe

我有这样的问题: 为此的DataFrame:http://sigmaquality.pl/wp-content/uploads/2019/03/sample.csv

enter image description here

我有两列:邮政编码和国家/地区代码。 我在列中有许多空单元格:国家/地区代码。 我知道邮政编码是否带有掩码XX-XXX,这是波兰代码。 因为我知道,所以我可以用符号“ PL”填充空白单元格 我不知道该怎么做。

我奖励所有帮助我的人!

如何使用条件填充数据?

5 个答案:

答案 0 :(得分:4)

将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

答案 1 :(得分:4)

通过np.wherestr.contains进行检查

df['COUNTRY']=np.where(df['POSTAL_CD'].str.match(r'\d{2}-\d{3}')&df['COUNTRY'].isnull(),'PL',df['COUNTRY'])

答案 2 :(得分:2)

如何使用位置索引器as shown here

df = pd.read_csv("sample.csv", sep=",", index_col=0)
df.loc[df["POSTAL_CD"].str.contains("-", na=False), "COUNTRY"] = "PL"

答案 3 :(得分:1)

当我编写此代码时,我认为您需要一个带有[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)

答案 4 :(得分:1)

一段时间后,我学到了一点,然后我会这样做:

df['Nowa'] = df['POSTAL_CD'].str.slice(2,3)
df['Nowa'] = df['Nowa'].apply(lambda x: 'PL' if x == '-' else np.nan)
df['COUNTRY'].fillna(df['Nowa'], inplace=True) 
del df['Nowa']
df

enter image description here