AttributeError: 'str' object has no attribute 'merge'

AttributeError: 'str' object has no attribute 'merge'

我正在尝试合并 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'

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

您使用 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])

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

让我们改变:

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')

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

尝试:

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