我一直在寻找一种方法,使用pandas库将带有多个标题的excel文件转换为列标题。
通过读取文件并使用ExcelFile解析数据,我成功地将数据导入数据框。我也能够使用header = [0,4]来识别标题。我遇到的问题是重新索引和/或使用融合函数将标题转换为列。
当我使用融合功能时,我能够成功地将列转换为行。但是,我希望标题是一个列,而不是与其余数据堆叠。
目前,这是数据的结构:
Excel file displaying data with multiple headers
转换后,数据应如下所示:
Data that is unpivot with headers converted into columns
我一直在阅读关于索引的内容,但不确定我是否理解它将如何适用于此。
我是python的新手,就像新手一样,非常感谢任何支持或指导。我一直在阅读以下的cheatsheets,但没有找到正确的方法来转换它:
https://www.datacamp.com/community/data-science-cheatsheets
以下是示例代码:
import pandas as pd
xl = pd.ExcelFile('help.xlsx')
df1 = xl.parse('Sheet1')
df2 = pd.melt(df1,
id_vars=['PW'],
value_vars=['Fruit','Conventional'])
此外,在运行代码后添加结果: df1 the data with multiple headers
以下是数据的错误(标题未转换为列,标题与其余数据堆叠在一起):
这是最终产品的外观:
答案 0 :(得分:1)
试试这个:
# In[1]:
df = pd.read_excel('help.xlsx', header=[0,1,2,3]) #Read file, use 4 rows as header
df.columns = df.columns.map(','.join) #Concatenate by ',' the fields name
df = df.rename_axis('PW').reset_index() #reset and rename index
df2 = pd.melt(df, id_vars=list(df.columns)[0], value_vars=list(df.columns)[1:], value_name='Volume') #Unpivot table, g roping by 'variable' and 'volume'
df2[['Category', 'Field_Type', 'Growing_Method', 'Product']] = df2['variable'].str.split(',',expand=True) #Split using ',' as delimeter
df2.__delitem__('variable') #Delete extra field 'variable'
#Reorder Columns
cols = df2.columns.tolist()
df2 = df2[[cols[0]] + cols[2:] + [cols[1]]]
df2
答案 1 :(得分:0)
完成此类重塑的一种方法是使用function getAccountBalance(app) {
let accountowner = app.getArgument(PARAM_ACCOUNT_OWNER);
console.log('accessToken: ' + app.getUser().accessToken);
var accessToken = app.getUser().accessToken;
auth0.getProfile( accessToken )
.then( userInfo => {
console.log('getAccountBalance userInfo:' + userInfo)
// query firestore based on user
var transactions = db.collection('bank').doc(userInfo.email)
.db.collection('accounts').doc(accountowner)
.collection('transactions');
return transactions.get();
})
.then( snapshot => {
var workingbalance = 0
snapshot.forEach(doc => {
workingbalance = workingbalance + doc.data().amount;
});
app.tell(accountowner + " has a balance of $" + workingbalance)
})
.catch( err => {
console.error('Error:', err );
app.tell('I was unable to retrieve your balance at this time.')
})
});
}
的{{3}}操作:
pandas