numpy Pandas read_csv()将整数列转换为浮点数,如果有NaN,如何保持它们为整数?

uxh89sit  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(202)

我需要使用read_csv()从csv文件中创建一个dataframe。csv文件中的大多数列都是整数类型(如购买的产品数量)或字符串类型(如商店名称),但有时可能会有浮点类型(如产品的重量(磅))。
我意识到,如果有空白单元格,Pandas会将整数(int64)列转换为浮点数(float64),这就变成了NaN,这是一种浮点类型。
我想保留原来有整数的单元格,程序的其他部分也依赖于此。
我试过:

for col in data.columns:
    if data[col].dtype == np.float64:
        data[col] = data[col].astype(float).astype('Int64')

但是这会尝试将所有的浮点列都变成整数,有可能我希望保持浮点的列最初是浮点的(而不是因为NaN而被强制变成浮点的)。
当使用read_csv()时,我不能为每个列的dtype指定字典,因为每个数据集都是不同的,这将是大量的手工工作。
我想知道是否有一种方法可以在阅读csv时将所有列都视为“对象”类型?据我所知,“对象”类型允许列中的混合类型。

cwdobuhd

cwdobuhd1#

当使用read_csv()时,我不能为每列的dtype指定字典,因为每个数据集都是不同的,这将是大量的手工工作。
在这种情况下,使用convert_dtypes,它将仅在需要时自动分配Int64

import io
csv = io.StringIO('''
foo,bar,baz
a,2.3,99
b,5.1,
''')

df = pd.read_csv(csv).convert_dtypes()
#   foo  bar   baz
# 0   a  2.3    99
# 1   b  5.1  <NA>

df.dtypes
# foo     string
# bar    Float64
# baz      Int64
# dtype: object

相关问题