AttributeError:'str'对象没有属性'merge'

时间:2019-12-13 16:50:14

标签: 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)

错误

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'

3 个答案:

答案 0 :(得分:3)

考虑对参数进行更好的命名,这将使调试过程更加容易。

让我们改变:

file1 = sys.argv[2]
file2 = sys.argv[3]

对此:

file1_name = sys.argv[2]
file2_name = sys.argv[3]

现在很清楚,它们不是文件类型,而只是文件的字符串名称

现在让我们创建对象:

file1_object = pd.read_csv(file1_name)
file2_object = pd.read_csv(file2_name)
merged_file = file1_object.merge(file2_object, on='username')

答案 1 :(得分:0)

正如@ anky_91所建议的,我认为这是因为您没有在任何地方保存pandas数据框。您的合并命令正在读取ARGV项目。

尝试:

foo = pd.read_csv(file1)
bar = pd.read_csv(file2)
merge = foo.merge(bar, on='username')

答案 2 :(得分:-1)

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

您使用pd.read_csv创建的数据框未分配任何内容。

更改

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

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