import pandas as pd
df1=pd.read_csv('out.csv')
df2=pd.read_excel('file.xls')
df2['Location']=df1['Location']
df2['Sublocation']=df1['Sublocation']
df2['Zone']=df1['Zone']
df2['Subnet Type']=df1['Subnet Type']
df2['Description']=df1['Description']
newfile = input("Enter a name for the combined xlsx file: ")
print('Saving to new xlsx file...')
writer = pd.ExcelWriter(newfile)
df2.to_excel(writer, index=False)
writer.save()
基本上,它读取一个包含5列的csv文件并读取包含现有列的xls文件,然后生成一个xlsx文件,其中两个文件与5个新列组合。
所以它可以工作,但只有4999行,最后10个在新的xlsx文件中没有5个新列。
答案 0 :(得分:1)
我对这个问题感到困惑,所以我想出了两个选择 1.将df1附加到df2 2.将df1合并到df2(将新列添加到现有df) 。我认为在你的情况下你在csv和excel中没有相同的行数,因此最后10行在输出中没有值
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.array([
['a', 51, 61],
['b', 52, 62],
['c', 53, 63]]),
columns=['name', 'attr11', 'attr12'])
df2 = pd.DataFrame(np.array([
['a', 31, 41],
['b', 32, 42],
['c', 33, 43],
['d',34,44]]),
columns=['name', 'attr21', 'attr22'])
df3= df1.append(df2)
print df3
print pd.merge(df1,df2,on='name',how='right')
答案 1 :(得分:1)
很可能有一种方法可以在pandas
内执行您想要的操作,但是如果没有,您可以使用较低级别的包来完成任务。
要阅读CSV文件,请使用Python附带的csv
模块。以下代码将所有数据加载到Python列表中,其中列表的每个元素都是CSV中的一行。请注意,此代码不像经验丰富的Python程序员那样紧凑。我试图在Python初学者的可读性和“惯用语”之间取得平衡:
import csv
with open('input1.csv', 'rb') as f:
reader = csv.reader(f)
csvdata = []
for row in reader:
csvdata.append(row)
要阅读.xls文件,请使用xlrd
,这应该已经安装pandas
使用它,但您可以根据需要单独安装它。同样,以下代码不是最短的,但希望很容易理解:
import xlrd
wb = xlrd.open_workbook('input2.xls')
ws = wb.sheet_by_index(0) # use the first sheet
xlsdata = []
for rx in range(ws.nrows):
xlsdata.append(ws.row_values(rx))
最后,使用XlsxWriter将合并后的数据写入.xlsx文件。如果您已使用pandas
编写Excel文件,则可能已经安装了另一个软件包,但如果需要可以单独安装。我再次尝试坚持相对简单的语言功能。例如,我已经避免了zip()
,其工作原理对于Python初学者来说可能并不明显:
import xlsxwriter
wb = xlsxwriter.Workbook('output.xlsx')
ws = wb.add_worksheet()
assert len(csvdata) == len(xlsdata) # we expect the same number of rows
for rx in range(len(csvdata)):
ws.write_row(rx, 0, xlsdata[rx])
ws.write_row(rx, len(xlsdata[rx]), csvdata[rx])
wb.close()
请注意,write_row()
允许您选择最左侧数据元素的目标单元格。所以我每行使用它两次:一次在最左边写入.xls数据,再一次用合适的偏移量写入CSV数据。
答案 2 :(得分:0)
我认为你应该附加数据
import pandas as pd
df1=pd.read_csv('out.csv')
df2=pd.read_excel('file.xls')
df2.append(df1)
newfile = input("Enter a name for the combined xlsx file: ")
print('Saving to new xlsx file...')
writer = pd.ExcelWriter(newfile)
df2.to_excel(writer, index=False)
writer.save()