更新pandas dataframe列在第一个tim上不起作用

2024-04-20 11:54:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从其他一些数据帧合并而来的数据帧,然后我需要更新一列中的一些值,结果发现我必须进行两次相同的更新。为了找出发生了什么,我将数据帧保存到磁盘并重新加载,然后进行更新,现在它第一次运行。在

是熊猫的虫子还是我弄错了?在

我正在使用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

Tags: csv数据lambdamapdfdisplaycodeloc
1条回答
网友
1楼 · 发布于 2024-04-20 11:54:33

我查了数据,发现有些交易是:

11.化学纤维制造业
11.印刷和记录媒介复制业
...

第一次替换后,它们变成:

^{pr2}$

所以我得换两次。我把模式从'^(?\d?\.?\)?(其中:)?'改为'^(?\d*\.?\)?(其中:)?',一切正常。在

感谢所有的回复和评论。在

相关问题 更多 >