【发布时间】:2019-09-10 20:16:57
【问题描述】:
我正在尝试创建一个带有两个没有索引的标头的 csv,如下所示:
Inventory,,,,
PartNumber,Quantity,VendorName,FulfillmentCenterName,Delete
2056,00000037,cl Vendor,010039,0
2058,00000040,cl Vendor,010039,0
2065,00000083,cl Vendor,010039,0
2066,00000011,cl Vendor,010039,0
2067,00000000,cl Vendor,010039,0
我的脚本开始通过 API 下载文件,然后我转换它的格式以减少列并重新命名。
我的问题是我无法添加第一个标题 Inventory,,, 。我可以添加第二个。
这是我的代码
import pandas as pd
import numpy as np
import requests
import io
import pandas as pd
import requests
import io
question = input('update data? y/n: ')
if question == 'y':
print ('Actualizando...')
url = 'http://.net/api/offers'
r = requests.get(url, headers={'Authorization': 'aea2-a3e4a32afdc4'})
i = io.StringIO(r.content.decode('utf-8'))
OF51_ALL = pd.read_csv(i,sep=';', engine = 'python')
cols = ['offer-id','quantity','shop-id','shop-name']
OF51_ALL_SELECTED = OF51_ALL[cols]
df = pd.DataFrame(OF51_ALL_SELECTED)
writer = pd.ExcelWriter('C:\\Users\\local\\parentfile.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
writer.save()
print ('update OK')
else: print('->')
datos = pd.read_excel(open('parentfile.xlsx','rb'), sheet_name = 'Sheet1')
datos['quantity'] = datos['quantity'].astype(str)
datos['offer-id'] = datos['offer-id'].astype(str)
datos['lenghts'] = datos['quantity'].apply(len)
datos.loc[(datos['lenghts'] == 1, 'new_col')] = '0000000'
datos.loc[(datos['lenghts'] == 2, 'new_col')] = '000000'
datos.loc[(datos['lenghts'] == 3, 'new_col')] = '00000'
datos.loc[(datos['lenghts'] == 4, 'new_col')] = '0000'
datos.loc[(datos['lenghts'] == 5, 'new_col')] = '000'
datos.loc[(datos['lenghts'] == 6, 'new_col')] = '00'
datos.loc[(datos['lenghts'] == 7, 'new_col')] = '0'
datos.loc[(datos['lenghts'] == 8, 'new_col')] = ''
datos['Quantity'] = datos['new_col']+datos['quantity']
datos.loc[(datos['lenghts'] <=8 , 'VendorName')]='cl Vendor'
datos.loc[(datos['lenghts'] <=8 , 'FulfillmentCenterName')]='010039'
datos.loc[(datos['lenghts'] <=8 , 'Delete')]='0'
datos.columns = ['PartNumber','quantity','shop-id','shop-name','len','z','Quantity','VendorName','FulfillmentCenterName','Delete']
eleccion = input('create: all or number?: ')
if eleccion == 'number':
selecid = int(input('indicate: '))
filtered=(datos.loc[datos['shop-id'] == selecid])
indexdata = filtered.set_index('PartNumber')
print (indexdata['shop-name'])
print ('File was saved')
indexdata.to_csv('C:\\file.csv', index = 'false', encoding = 'utf-8-sig', columns=['Quantity','VendorName','FulfillmentCenterName','Delete'])
elif eleccion == 'all':
indexdata2 = datos.set_index('PartNumber')
indexdata2.to_csv('C:\\file.csv',index = 'false', encoding = 'utf-8-sig', columns=['Quantity','VendorName','FulfillmentCenterName','Delete'])
print ('File was saved')
else: print ('ERROR')
【问题讨论】:
-
为什么有这么多逗号?是否应该有空白标题?
-
你为什么要评论你自己的问题?如果你想澄清它,你可以edit它。作为新用户,也可以使用tour 并阅读How to Ask。
-
哦,你的意思是你想要多索引?
-
我和之前的 cmets 一样困惑,但看起来您正在尝试转换为列标题具有层次结构的 csv。您可以在写入 csv 之前使用
df.columns.droplevel()消除此问题