簡體   English   中英

"阻止 Pandas 將 int 轉換為 float"

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM