[英]Handling empty value in Excel by pandas read_excel()
我在Pandas github repo中評論了一個已關閉的問題:
在Excel中將空值視為nan
還有另一個副作用:整數將轉換為float。 在該列上的后續操作將再次產生其他效果。
同樣, read_excel()
不支持轉換器中函數提供的空值處理:
我有一個包含以下數據的Excel文件temp.xlsx
:
Key3
列中的值周圍有空格。
Key1,Key2,Key3,Key4
0,11, Apple ,1.12
1,12,,1.02
2,13, Orange,
3, ,Banana ,0.01
這是代碼:
import numpy as np
import pandas as pd
def handle_string(value):
return value.replace(' ', '')
def handle_integer(value):
if value == '':
return 0
else:
int(value)
def handle_float(value):
if value == '':
return 0.0
else:
float(value)
df = pd.read_excel(
'temp.xlsx',
)
print(df)
print(f"type(df.loc[3,'Key2']) = {type(df.loc[3,'Key2'])}")
print(f"type(df.loc[1,'Key3']) = {type(df.loc[1,'Key3'])}")
print(f"type(df.loc[2,'Key4']) = {type(df.loc[2,'Key4'])}")
print('')
df = pd.read_excel(
'temp.xlsx',
converters={\
'Key1' : handle_integer,
'Key2' : handle_integer,
'Key3' : handle_string,
'Key4' : handle_float,
}
)
print(df)
print(f"type(df.loc[3,'Key2']) = {type(df.loc[3,'Key2'])}")
print(f"type(df.loc[1,'Key3']) = {type(df.loc[1,'Key3'])}")
print(f"type(df.loc[2,'Key4']) = {type(df.loc[2,'Key4'])}")
輸出:
Key1 Key2 Key3 Key4
0 0 11.0 Apple 1.12
1 1 12.0 NaN 1.02
2 2 13.0 Orange NaN
3 3 NaN Banana 0.01
type(df.loc[3,'Key2']) = <class 'numpy.float64'>
type(df.loc[1,'Key3']) = <class 'float'>
type(df.loc[2,'Key4']) = <class 'numpy.float64'>
Key1 Key2 Key3 Key4
0 None NaN Apple NaN
1 None NaN NaN NaN
2 None NaN Orange 0.0
3 None 0.0 Banana NaN
type(df.loc[3,'Key2']) = <class 'numpy.float64'>
type(df.loc[1,'Key3']) = <class 'float'>
type(df.loc[2,'Key4']) = <class 'numpy.float64'>
dtype
參數的優先級低於converters
。
我可能是錯的,但在我看來問題似乎與這些函數的返回值有關。 在兩個地方,您顯然沒有打算返回None
。 見下文:
def handle_string(value):
return value.replace(' ', '')
def handle_integer(value):
if value == '':
return 0
else:
int(value) # Returns none!!!
def handle_float(value):
if value == '':
return 0.0
else:
float(value) # Returns none!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.