我有这样的问题: 为此的DataFrame:http://sigmaquality.pl/wp-content/uploads/2019/03/sample.csv
我有两列:邮政编码和国家/地区代码。
我在列中有许多空单元格:国家/地区代码。
我知道邮政编码是否带有掩码XX-XXX
,这是波兰代码。
因为我知道,所以我可以用符号“ PL”填充空白单元格
我不知道该怎么做。
我奖励所有帮助我的人!
如何使用条件填充数据?
答案 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.where
和str.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)