尝试从csv文件传输5009行到xlsx

时间:2016-08-03 18:04:05

标签: python python-3.x csv pandas xls

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个新列。

3 个答案:

答案 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()