重置pandas数据帧的值

时间:2016-11-11 13:57:02

标签: python csv pandas dataframe

我有一个pandas dataFrame,它包含以下元素

146200  146218  146266       -1
146205  146203      -1   146234
146204  146207      -1   146300

我想重新格式化我的dataFrame,使其成为

0  18  66   -1
5   3  -1   34
4   7  -1  100

146200,146201,146300,...的相应起始值为0,1,100,...,不包括-1。这些是系列,好像我没有弄错;我不确定如何使用pandas dataFrame处理它们。阅读我的数据框后如下

import pandas as pd
df=pd.read_csv('myfile.csv')

我不确定如何改变它。

2 个答案:

答案 0 :(得分:1)

您可以使用DataFrame.where

df = df.where(df == -1, df - 146200)
print (df)
   0   1   2    3
0  0  18  66   -1
1  5   3  -1   34
2  4   7  -1  100

答案 1 :(得分:0)

这是一个可能的实现:

import pandas as pd

df = pd.DataFrame([[146200,  146218,  146266,       -1],
                   [146205,  146203,      -1,   146234],
                   [146204,  146207,      -1,   146300]])

# leave -1 unchanged otherwise subtract a number "base" from the element 
def my_transf(x, base): return x-base if x != -1 else x

# Apply the transformation above to each element of the dataframe               
transformed = df.applymap(lambda x: my_transf(x, df.iloc[0,0]))