为什么我的功能不起作用?我想创建一个函数来清理我的数据帧,然后我可以调用它并更改参数



以下是代码:

import pandas as pd
filejan = "01.xls"
filefeb = "02.xls"
roomtype = {
'Room Type Code': ['DLK', 'DTN', 'DTP', 'DKP', 'PTG', 'PKG', 'PTP', 'PKP', 'PKL', 'PTL', 'FPK', 'DLS', 'PRS', 'AVS', 'ASW', 'ASP', 'AVP', 'BFS', 'AVR'],
'Room Type': ['Deluxe', 'Deluxe', 'Deluxe Pool', 'Deluxe Pool', 'Premiere', 'Premiere', 'Premiere', 'Premiere', 'Lagoon', 'Lagoon', 'Family', 'DL Suite', 'PR Suite', 'AS No Pool', 'AS Whirl Pool', 'AS Private Pool', 'Villa', 'Beach Front', 'Residence']
}
mtdjan = pd.read_excel(filejan)
mtdfeb = pd.read_excel(filefeb)
dataRoomType = pd.DataFrame(roomtype, columns=['Room Type Code', 'Room Type'])

def cleanJan(dataFebruary):
dataFebruary.drop([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], axis=0)
dataFebruary.drop(["Unnamed: 3", "Unnamed: 4", "Unnamed: 10", "Unnamed: 13",
"Page -1 of 1", "Unnamed: 6", "Unnamed: 2"], axis=1)
dataFebruary.dropna()
dataFebruary.rename(
columns={
"The xxx Beach Resorts Bali": "Date Create",
"Unnamed: 1": "Name",
"Unnamed: 5": "Room Type Code",
"Unnamed: 7": "Arrival",
"RESERVATION LIST": "Departure",
"Unnamed: 9": "Rate Code",
"Unnamed: 11": "Rate",
"Unnamed: 12": "Company",
"Unnamed: 14": "Segment",
"Unnamed: 15": "Status",
},
)

df1 = cleanJan(mtdjan)
df2 = cleanJan(mtdfeb)
print(df1)

这是终端

==============================================
WARNING *** file size (1195377) not 512 + multiple of sector size (512)
WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
WARNING *** file size (1228825) not 512 + multiple of sector size (512)
WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
**None**
==========================================

许多panda函数不修改它所调用的df,而是返回一个修改后的df。通常,如果可用,您应该使用inplace=True参数,或者使用

df = df.some_function(..) 
... 
return df

在函数中构造。例如,函数中的dropna调用应该修改为如下

dataFebruary.dropna(inplace = True)

并且对于CCD_ 3和CCD_

编辑

您的函数代码看起来是正确的,只是我在第一次传递时错过了它,它没有返回任何内容,所以df1 = ...只有df1 = None

因此,我将按如下方式修改该函数——首先,它将有一个返回值,其次,它将不使用inplace参数,因为它更像"Python":

def cleanJan(dataFebruary):
df = dataFebruary.drop([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], axis=0)
df = df.drop(["Unnamed: 3", "Unnamed: 4", "Unnamed: 10", "Unnamed: 13",
"Page -1 of 1", "Unnamed: 6", "Unnamed: 2"], axis=1)
df = df.dropna()
df = df.rename(
columns={
"The xxx Beach Resorts Bali": "Date Create",
"Unnamed: 1": "Name",
"Unnamed: 5": "Room Type Code",
"Unnamed: 7": "Arrival",
"RESERVATION LIST": "Departure",
"Unnamed: 9": "Rate Code",
"Unnamed: 11": "Rate",
"Unnamed: 12": "Company",
"Unnamed: 14": "Segment",
"Unnamed: 15": "Status",
},
)
return df

df1 = cleanJan(mtdjan)
df2 = cleanJan(mtdfeb)
print(df1)

相关内容

最新更新