2016-03-09 245 views
2

我想寫一個4表,3列和50行數據框文件到csv使用熊貓。我收到以下錯誤AttributeError: 'dict' object has no attribute 'to_csv'。我相信我正確地編寫了語法,但是任何人都可以指出我的語法在嘗試將數據框寫入csv時不正確嗎?Python - 熊貓 - 寫數據框到CSV

'dict' object has no attribute 'to_csv' 

import pandas as pd 
import numpy as np 

df = pd.read_excel("filelocation.xlsx", 
    sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data'], 
    skiprows=8, parse_cols="B:D", keep_default_na='FALSE', na_values=['NULL']) 

df.to_csv('filelocation.csv', line_terminator=',', index=False, header=False) #error occurs on this line 
+2

由於您正在使用多張工作表讀取xlsx,因此您會得到一個數據框字典,其中鍵爲工作表名稱,數據爲數據框。您需要將其轉換爲單個數據框(concat,或根據您的要求進行合併),或者在dict的循環中編寫csvs。 – jeremycg

+0

你知道我可以用什麼語法來調用一個sheetname關鍵字嗎? – pHorseSpec

回答

2

你的直覺是對的;代碼中的語法沒有任何問題。

您收到AttributeError,因爲你是你的工作簿中讀取來自多個工作表數據,生成DataFrames的字典(而不是一個數據幀),從中你試圖to_csv(僅適用於一個數據幀的方法)。

在編寫代碼時,您生成的字典的鍵與工作表的名稱相對應,並且值分別爲各自的DataFrame。這一切都在read_excel()方法的文檔中解釋。

要寫出一個CSV文件,從所有的工作表包含聚合數據,你可以通過工作表循環,每個數據幀添加到您的文件(這個作品,如果你的牀單具有相同的結構和尺寸):

import pandas as pd 
import numpy as np 

sheets = ['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data'] 

for sheet in sheets: 
    df = pd.read_excel("filelocation.xlsx", 
     sheetname=sheet, 
     skiprows=8, 
     parse_cols="B:D", 
     keep_default_na='FALSE', 
     na_values=['NULL']) 

    with open('filelocation.csv', 'a') as f: 
     df.to_csv(f, line_terminator=',', index=False, header=False)