我有一个正在读取的csv文件,有一列数字字符串,并且我试图获取两个后续行之间的差异。这些数字在值(例如4.23ft)之后的深度处带有“ ft”,我能够摆脱“ ft”(例如4.230),但无法弄清楚如何分配值,因此我可以做数学。
depth = float(depth)
rate=0
'''Need to find a way to subtract next line from current line to find
rate of change over 15 minute period'''
for i, data in enumerate(depth):
d1=i
d2=i+1
while rate == 0:
rate = d1-d2
print(rate)
这给了我一个TypeError的“'float'对象不可迭代”。 当我注释掉“ depth = float(depth)”这一行时,我只得到-1值,我知道那里的问题。
first few lines of raw data first few lines of result data
第二行第一个值减去第二个值等于第三行中的第一个值。
答案 0 :(得分:1)
由于您已经从列中删除了“ ft”部分,并假设已将字符串的其余部分转换为浮点型,所以我将直接跳至下一部分。
如果我了解要正确实现的目标,还可以使用pandas.DataFrame.shift:
df = pd.DataFrame()
df['D1'] = [1.0, 2.0, 3.0, 4.0, 5.0]
通过执行移位操作,您的D1是当前行中的值,D2将是D1中的列。
df['D2'] = df['D1'].shift(-1)
您的数据框现在将如下所示:
D1 D2
0 1.0 2.0
1 2.0 3.0
2 3.0 4.0
3 4.0 5.0
4 5.0 NaN
简而言之,您会将当前行的下一行的值添加到新列中。现在,您可以照常在两列之间执行减法/差分运算。例如:
df['D3'] = df['D1'] - df['D2']
或
df['D3'] = df['D1'].sub(df['D2'])