python – 用于从pandas数据帧中过滤所需行的正则表达式

我正在使用相当混乱的数据:具有以下形式的关税表:

import pandas as pd
import numpy as np

data1 = np.array([u'Free (A, B, KR, FR), 5% (JP)', u'Free (A, B, FR), 5% (JP, KR))'])
data2 = np.array(['10101010', '10101020'])
data = {'hscode': data2, 'tariff' : data1}

df = pd.DataFrame(data, columns=['hscode', 'tariff'])

第一行显示国家(A,B,KR,FR)的关税为零,JP为5%,第二行显示A,B,FR为0,JP和KR为5%.

我想找到每一行国家’KR’的关税税率,以便我可以得到下表:

‘hscode”关税’

10101010 0%

10101020 5%

所以,我想在每个单元格中找到县代码“KR”的关税税率.

最佳答案 您可以使用正则表达式申请:

## -- End pasted text --

In [133]: import re

In [134]: df
Out[134]: 
     hscode                         tariff
0  10101010   Free (A, B, KR, FR), 5% (JP)
1  10101020  Free (A, B, FR), 5% (JP, KR))

In [135]: df['tariff'].apply(lambda x: ''.join(re.findall(r'.*(Free|\d+%).*\bKR\b', x)))
Out[135]: 
0    Free
1      5%
Name: tariff, dtype: object

解释:在关税内,如果字符串包含“KR”,则捕获“Free”或“x%”.

您可以创建一个函数来动态设置“KR”作为查找变量.

点赞