[英]How to stop Pandas DataFrame from converting int to float for no reason?
[英]Stop Pandas from converting int to float
我有一個
DataFrame<\/code> 。
以下是兩個相關列:一個是
int<\/code>列,另一個是
str<\/code>列。
我知道如果我將
NaN<\/code>插入
int<\/code>列,Pandas 會將所有
int<\/code>轉換為
float<\/code>因為
int<\/code>沒有
NaN<\/code>值。
但是,當我將
None<\/code>插入
str<\/code>列時,Pandas 也會將我的所有
int<\/code>轉換為
float<\/code> 。
這對我來說沒有意義 - 為什么我在第 2 列中輸入的值會影響第 1 列?
這是一個簡單的工作示例(Python 2):
import pandas as pd
df = pd.DataFrame()
df["int"] = pd.Series([], dtype=int)
df["str"] = pd.Series([], dtype=str)
df.loc[0] = [0, "zero"]
print df
print
df.loc[1] = [1, None]
print df
如果您設置dtype=object
,您的系列將能夠包含任意數據類型:
df["int"] = pd.Series([], dtype=object)
df["str"] = pd.Series([], dtype=str)
df.loc[0] = [0, "zero"]
print(df)
print()
df.loc[1] = [1, None]
print(df)
int str
0 0 zero
1 NaN NaN
int str
0 0 zero
1 1 None
從 pandas 1.0.0 開始,我相信您還有另一種選擇,即首先使用convert_dtypes 。 這會將數據幀列轉換為支持 pd.NA 的數據類型,從而避免 NaN/None 的問題。
...
df = df.convert_dtypes()
df.loc[1] = [1, None]
print(df)
# int str
# 0 0 zero
# 1 1 NaN
這同樣有效:
df["int"] = df["int"].astype(int)
來自https://stackoverflow.com/a/33313377/4355695
編輯:當列有空白時,這不是很好:(
如果您使用DataFrame.append
添加數據,dtypes 將被保留,您不必重新轉換或依賴object
:
In [157]: df
Out[157]:
int str
0 0 zero
In [159]: df.append(pd.DataFrame([[1, None]], columns=['int', 'str']), ignore_index=True)
Out[159]:
int str
0 0 zero
1 1 None
緊接着
df = pd.DataFrame()
添加以下內容,它將整個系列初始化為 int。 這對我有用。
df['int'] = 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.