使用减法修改列中的数据

时间:2018-10-02 11:02:13

标签: python-3.x pandas csv

目前,我正在使用熊猫编写python代码,以通过减法读取和修改“用户时间”列中的数据。我正在读取的csv文件有一个整月的数据。在“用户时间”,所有时间数据均以一秒的间隔存储。这些值会在1周后重复。但我希望在1天后重复一次。因此,编写以下代码:

import pandas as pd
df = pd.read_csv('out.csv')
x = df['User Time']


if 86400 < x.any() and x.any() > 172800:
    x = x - 86400
elif 172800 < x.any() and x.any() > 259200:
    x = x - 172800
elif 259200 < x.any() and x.any() > 345600:
    x = x - 259200
elif 345600 < x.any() and x.any() > 432000:
    x = x - 345600
elif 432000 < x.any() and x.any() > 518400:
    x = x - 432000
else:
    x = x - 518400

df.to_csv('out.csv')

没有错误,只是将所有值都减去518400。以前的条件不起作用。

我是python的新手。请帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以创建自定义函数并从最后到第一个更改条件的顺序,因为在原始解决方案中总是匹配第一个条件:

np.random.seed(156)
df = pd.DataFrame({'User Time':np.random.randint(86400, 519400, size=10)})
#print (df)

def func(x):

    if (432000 < x) and (x < 518400):
        return x - 432000
    elif (345600 < x) and (x < 432000):
        return x - 345600
    elif (259200 < x) and (x < 345600):
        return x - 259200
    elif (172800 < x) and (x < 259200):
        return x - 172800
    elif (86400 < x) and (x < 172800):
        return x - 86400
    else:
        return x - 518400

df['new1'] = df['User Time'].apply(func)
df['new2'] = df['User Time'] - 86400
print (df)
   User Time   new1    new2
0     176044   3244   89644
1     257100  84300  170700
2     259874    674  173474
3     289963  30763  203563
4     474506  42506  388106
5     494801  62801  408401
6     399588  53988  313188
7     503743  71743  417343
8     344194  84994  257794
9     399799  54199  313399