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