Python 减去两个值并再次存储时出错

Python 减去两个值并再次存储时出错,python,csv,numpy,pandas,Python,Csv,Numpy,Pandas,我有两个文件first.csv和second.csv,在first.csv中我有两个标题LAC和reference count,second.csv标题的编号可以是任意数字,但它将遵循一种格式,即一列包含LAC all id,后面是时间-日期序列,我需要获取LAC(id)从second.csv开始,在first.csv的LAC中搜索,获取参考计数并减去second.csv所有时间序列的值。您可以更好地理解预期输出 First.csv LAC Reference_Count 1000 500

我有两个文件first.csv和second.csv,在first.csv中我有两个标题LAC和reference count,second.csv标题的编号可以是任意数字,但它将遵循一种格式,即一列包含LAC all id,后面是时间-日期序列,我需要获取LAC(id)从second.csv开始,在first.csv的LAC中搜索,获取参考计数并减去second.csv所有时间序列的值。您可以更好地理解预期输出

First.csv
LAC Reference_Count
1000    500
2222    1000
3333    500
5555    1000
9999    1500

Second.csv
LAC 10/08/15 00:00  10/08/15 01:00
1000    2000    2500
2222    3000    4000
这是我的密码

second.csv 
    LAC  10/08/15 00:00  10/08/15 01:00
0  1000            1500            2000
1  2222            2000            3000
我得到了这个错误

import pandas as pd
location='/home/saiharsh/Documents/Crowd Street/BUgs/second.py.csv'
master_lac_path='/home/saiharsh/Documents/Crowd Street/Final/first.csv'
master_csv_file = master_lac_path
df_master=pd.read_csv(master_csv_file,error_bad_lines=False)
df2=pd.read_csv(location,error_bad_lines=False)
header=list(df2.iloc[:,1:].columns.values)
print df2
for i in range(len(df2)):
            val=df_master[df_master['LAC']==df2['LAC'][i]]['Reference_Count']
            for j in header:
                Tmp=df2[j][i]
                tmp=df2[df2[j]==Tmp][j]
                value=tmp-val
                print type(tmp),type(val),type(value)
                df2.set_value(i,j,value)
print df2
我的pandas版本是0.16.2,numpy版本是1.9.2


请帮我解决这个问题。

尝试将所有内容转换为float,因为错误表明您有一个字符串,您正试图使用它进行数学运算

您是否尝试过:

Traceback (most recent call last):
  File "/home/Py_Process_Plots/master_lac.py", line 14, in process
    value=tmp-val
  File "/home/software/anaconda/lib/python2.7/site-packages/pandas/core/ops.py", line 524, in wrapper
    arr = na_op(lvalues, rvalues)
  File "/home/software/anaconda/lib/python2.7/site-packages/pandas/core/ops.py", line 475, in na_op
    result[mask] = op(x[mask], _values_from_object(y[mask]))
TypeError: unsupported operand type(s) for -: 'str' and 'float'

如果错误在此之后发生变化,请告诉我。也发布错误。

尝试将所有内容转换为float,因为错误表示您有一个字符串,您正试图使用它进行计算

您是否尝试过:

Traceback (most recent call last):
  File "/home/Py_Process_Plots/master_lac.py", line 14, in process
    value=tmp-val
  File "/home/software/anaconda/lib/python2.7/site-packages/pandas/core/ops.py", line 524, in wrapper
    arr = na_op(lvalues, rvalues)
  File "/home/software/anaconda/lib/python2.7/site-packages/pandas/core/ops.py", line 475, in na_op
    result[mask] = op(x[mask], _values_from_object(y[mask]))
TypeError: unsupported operand type(s) for -: 'str' and 'float'
如果错误在此之后发生变化,请告诉我。也要发布错误。

这样做有效:

float(value) = float(tmp) - float(val)
您需要将LAC作为索引。以下内容不起作用

df1 = pd.read_csv('First.csv', sep='\t', header=0, index_col=0)
df2 = pd.read_csv('Second.csv', sep='\t', header=0, index_col=0)
dfans = df2.subtract(df1.iloc[:,0], axis=0).dropna()

print(df1)
      Reference_Count
LAC                  
1000              500
2222             1000
3333              500
5555             1000
9999             1500

print(df2)
      10/08/15 00:00  10/08/15 01:00
LAC                                 
1000            2000            2500
2222            3000            4000

print(dfans)
      10/08/15 00:00  10/08/15 01:00
LAC                                 
1000            1500            2000
2222            2000            3000
但是用LAC作为索引,它是有效的

index_default = pd.read_csv('test.csv', sep='\t', header=0)

print(index_default)
    LAC  10/08/15 00:00  10/08/15 01:00
0  2222            3000            4000
1  1000            2000            2500

dfans = index_default.subtract(df1.iloc[:,0], axis=0).dropna()

print(dfans)
Empty DataFrame
Columns: [LAC, 10/08/15 00:00, 10/08/15 01:00]
Index: []
这项工作:

float(value) = float(tmp) - float(val)
您需要将LAC作为索引。以下内容不起作用

df1 = pd.read_csv('First.csv', sep='\t', header=0, index_col=0)
df2 = pd.read_csv('Second.csv', sep='\t', header=0, index_col=0)
dfans = df2.subtract(df1.iloc[:,0], axis=0).dropna()

print(df1)
      Reference_Count
LAC                  
1000              500
2222             1000
3333              500
5555             1000
9999             1500

print(df2)
      10/08/15 00:00  10/08/15 01:00
LAC                                 
1000            2000            2500
2222            3000            4000

print(dfans)
      10/08/15 00:00  10/08/15 01:00
LAC                                 
1000            1500            2000
2222            2000            3000
但是用LAC作为索引,它是有效的

index_default = pd.read_csv('test.csv', sep='\t', header=0)

print(index_default)
    LAC  10/08/15 00:00  10/08/15 01:00
0  2222            3000            4000
1  1000            2000            2500

dfans = index_default.subtract(df1.iloc[:,0], axis=0).dropna()

print(dfans)
Empty DataFrame
Columns: [LAC, 10/08/15 00:00, 10/08/15 01:00]
Index: []

任何解决方案。它尝试了int()但不起作用即使我已经尝试过了,错误是
回溯(上次调用):文件“main.py”,第55行,在process()文件“main.py”,第46行,在process master_lac.process(tmp,master_lac_path)文件“/home/py_process_Plots/master_lac.py”,第18行,在process tmp=float(tmp)文件中“/home/software/anaconda/lib/python2.7/site packages/pandas/core/series.py”,包装“无法将系列转换为{0}”。format(str(converter)))TypeError:无法将系列转换为
任何解决方案。它尝试了int(),但不起作用即使我已经尝试过,错误是
回溯(最近一次调用):文件“main.py”,第55行,in process()文件“main.py”,第46行,in process master_lac.process(tmp,master_lac_path)文件“/home/py_process_Plots/master_lac.py”,第18行,in process tmp=float(tmp)文件“/home/software/anaconda/lib/python2.7/site packages/pandas/core/series.py”,第77行,包装器“无法将系列转换为{0}”。格式(str(转换器)TypeError:无法将序列转换为
当输入为LAC 10/08/15 00:00 10/08/15 01:00 0 2222 3000 4000 1 1000 2000 2500时,它不工作。在您的问题中,您必须为自己创建索引。在您的评论中,您还可以创建一个索引。如果您使用'index_col=0',则LAC将是您的索引,然后它应该可以工作。当输入为
LAC 10/08/15 00:00 10/08/15 01:00 0 2222 3000 4000时,它不工作1 1000 2000 2500
在您的问题中,您让pandas为您创建索引。在您的评论中,您也让pandas为您创建索引。如果您使用“index\u col=0”,则LAC将是您的索引,然后它应该可以工作。