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