Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';str';对象没有属性';合并';_Python_Python 3.x_Linux_Pandas_Attributeerror - Fatal编程技术网

Python 属性错误:';str';对象没有属性';合并';

Python 属性错误:';str';对象没有属性';合并';,python,python-3.x,linux,pandas,attributeerror,Python,Python 3.x,Linux,Pandas,Attributeerror,我正在尝试合并2个csv文件。我使用的文件名是sys.argv[n] 但是它使用文件名作为字符串吗?我做错了什么?(使用python3) 代码: import sys, pandas file1 = sys.argv[2] file2 = sys.argv[3] pd.read_csv(file1) pd.read_csv(file2) merge = file1.merge(file2, on='username') merge.to_csv("output.csv", index=False

我正在尝试合并2个
csv
文件。我使用的文件名是sys.argv[n] 但是它使用文件名作为字符串吗?我做错了什么?(使用python3)

代码:

import sys, pandas
file1 = sys.argv[2]
file2 = sys.argv[3]
pd.read_csv(file1)
pd.read_csv(file2)
merge = file1.merge(file2, on='username')
merge.to_csv("output.csv", index=False)
错误

Traceback (most recent call last):
  File "setup.py", line 93, in <module>
    merge_csv()
  File "setup.py", line 65, in merge_csv
    merge = file1.merge(file2, on='username')
AttributeError: 'str' object has no attribute 'merge'
回溯(最近一次呼叫最后一次):
文件“setup.py”,第93行,在
合并(csv)
文件“setup.py”,第65行,合并为csv
merge=file1.merge(file2,on='username')
AttributeError:“str”对象没有属性“merge”

您正在合并字符串文件名,而不是已创建的数据帧

您使用
pd.read\u csv
创建的数据帧没有分配给任何对象

改变

file1 = sys.argv[2]
file2 = sys.argv[3]
pd.read_csv(file1)
pd.read_csv(file2)


您正在合并字符串文件名,而不是已创建的数据帧

您使用
pd.read\u csv
创建的数据帧没有分配给任何对象

改变

file1 = sys.argv[2]
file2 = sys.argv[3]
pd.read_csv(file1)
pd.read_csv(file2)


考虑为参数使用更好的命名,这将使调试过程更容易

让我们改变:

file1=sys.argv[2]
file2=sys.argv[3]
为此:

file1\u name=sys.argv[2]
file2_name=sys.argv[3]
现在很清楚,它们不是文件类型,只是文件的字符串名

现在让我们创建对象:

file1\u object=pd.read\u csv(file1\u名称)
file2\u object=pd.read\u csv(file2\u名称)
merged\u file=file1\u object.merge(file2\u object,on='username')

考虑为参数使用更好的命名,这将使调试过程更容易

让我们改变:

file1=sys.argv[2]
file2=sys.argv[3]
为此:

file1\u name=sys.argv[2]
file2_name=sys.argv[3]
现在很清楚,它们不是文件类型,只是文件的字符串名

现在让我们创建对象:

file1\u object=pd.read\u csv(file1\u名称)
file2\u object=pd.read\u csv(file2\u名称)
merged\u file=file1\u object.merge(file2\u object,on='username')

正如@anky_91所建议的,我认为这是因为您没有在任何地方保存熊猫数据帧。您的merge命令正在读取ARGV项

尝试:


正如@anky_91所建议的,我认为这是因为您没有在任何地方保存熊猫数据帧。您的merge命令正在读取ARGV项

尝试:


如果将其分配给变量
file1=pd.read\u csv(file1)
file2=pd.read\u csv(file2)
,它会解决吗?目前,您只需读取文件,但不将其存储在变量中,因为您实际上是在传递字符串:D您需要做的是使用参数string查找csv文件,并在其上调用
read\u csv()
。如果您将其分配给变量
file1=pd.read\u csv(file1)
file2=pd.read\u csv(file2)
,它解决了吗?目前,您只需读取文件,但不将其存储在变量中,因为您实际上是在传递string:D。您需要做的是使用参数string找到您的csv文件,然后简单地在其上调用
read\u csv()
。充分利用自文档化变量。不过我要提到的一件事是,当
merge
已经是方法名时,使用
merge
作为变量名可能会导致意外的错误issues@G.Anderson是的,你是对的,我现在修复了它,谢谢你很好地使用了自文档变量。不过我要提到的一件事是,当
merge
已经是方法名时,使用
merge
作为变量名可能会导致意外的错误issues@G.Anderson是的,你说得对,我现在修好了,谢谢你
foo = pd.read_csv(file1)
bar = pd.read_csv(file2)
merge = foo.merge(bar, on='username')