我有一个从其他一些数据帧合并而来的数据帧,然后我需要更新一列中的一些值,结果发现我必须进行两次相同的更新。为了找出发生了什么,我将数据帧保存到磁盘并重新加载,然后进行更新,现在它第一次运行。在
是熊猫的虫子还是我弄错了?在
我正在使用conda 4.5.0中的pandas 0.22.0
import pandas as pd
sum_trade = pd.read_csv('somefile.csv')
df = pd.concat(
[
sum_trade.loc[sum_trade.mon == 201806 ].groupby(['trade'])['cnt'].sum(),
sum_trade.loc[sum_trade.mon == 201706 ].groupby(['trade'])['cnt'].sum(),
sum_trade.loc[sum_trade.mon > 201800].groupby(['trade'])['cnt'].sum(),
sum_trade.loc[sum_trade.mon < 201800].groupby(['trade'])['cnt'].sum()
],
axis = 1
).reset_index()
df.columns = ['trade_code', 'cnt201806', 'cnt201706', 'cnt20181-6', 'cnt20171-6']
# subsititude ["1.blabla", "(1)foofoo", "其中:barbar"] to ["blabla", "foofoo", "barbar"]
pattern = re.compile(r'^(?\d?\.?\)?(其中:)?')
df.to_csv('temp.csv')
# The following line would not success
df.trade_code = df.trade_code.map(lambda x: pattern.sub('', x.strip()))
display(df[df.trade_code.map(lambda x: '1' in x)])
# do same update again seems worked
df.trade_code = df.trade_code.map(lambda x: pattern.sub('', x.strip()))
display(df[df.trade_code.map(lambda x: '1' in x)])
# if load data from file, first update will sucesses
df = pd.read_csv('temp.csv')
display(df[df.trade_code.map(lambda x: '1' in x)])
df.trade_code= df.trade_code.map(lambda x: pattern.sub('', x.strip()))
display(df[df.trade_code.map(lambda x: '1' in x)])
以下是的一些示例数据somefile.csv文件,大约有2500条线,合并的df大约有200条线(名称和编号是伪造的):
^{pr2}$下面是上面代码的2个输出,这表明一些替换是成功的,而有些则不是。我运行了几次代码,总是以下4行没有在第一次更新。但是如果数据或模式有问题,第二次更新也不应该起作用。在
trade cnt201806 cnt201706 cnt20181-6 cnt20171-6
33 1.化学纤维制造业 0.0 123451.0 0.0 5432185.0
34 1.印刷和记录媒介复制业 5678913.0 7890153.0 5555504.0 112233185.0
63 1.金属制品业 98765804.0 4321563.0 34567919.0 22222256.0
82 1.金属制品、机械和设备修理业 8765493.0 3214929.0 3322113331.0 556677155.0
====================================================================
trade cnt201806 cnt201706 cnt20181-6 cnt20171-6
我查了数据,发现有些交易是:
第一次替换后,它们变成:
^{pr2}$所以我得换两次。我把模式从
'^(?\d?\.?\)?(其中:)?'
改为'^(?\d*\.?\)?(其中:)?'
,一切正常。在感谢所有的回复和评论。在
相关问题 更多 >
编程相关推荐