我正在处理相当混乱的数据:具有以下形式的关税表:
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为5%。 KR。
我想找到国家/地区的关税税率' KR'对于每一行,以便我可以使用下表:
' HSCODE' '关税'
10101010 0%
10101020 5%
所以,我想找到县代码的关税税率' KR'在每个细胞中。
答案 0 :(得分:2)
您可以使用正则表达式申请:
## -- 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
解释:在关税范围内,捕获" Free"或" x%"如果字符串包含" KR"。
您可以创建一个动态设置" KR"作为查找变量。
答案 1 :(得分:0)
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'])
df = []
for i, element in enumerate(data1):
free, five = element.lstrip('Free (').rstrip(')').split('), 5% (')
for country in free.split(', '):
row = [data2[i], 'Free', country]
df.append(row)
for country in five.split(', '):
row = [data2[i], '5%', country]
df.append(row)
df = pd.DataFrame(df, columns = ['hscode', 'tariff', 'country'])
print df.query('country == "KR"')
给出
hscode tariff country
2 10101010 Free KR
9 10101020 5% KR