【问题标题】:Losing cell formats when accessing rows访问行时丢失单元格格式
【发布时间】:2022-12-10 23:03:53
【问题描述】:

在某些情况下,通过行访问时,单元格的格式(int、float 等)会丢失。

在那个例子中,第一列是整数,第二列是浮点数。但是111被转换成111.0

dfA = pandas.DataFrame({
    'A': [111, 222, 333],
    'B': [1.3, 2.4, 3.5],
})

# A    111.0
# B      1.3
# Name: 0, dtype: float64
print(dfA.loc[0])

# <class 'numpy.float64'>
print(type(dfA.loc[0].A))

我期望的输出是这样的

A    111
B      1.3

<class 'numpy.int64'>

我知道为什么会这样。但恕我直言,这不是用户友好的。我能以某种方式解决这个问题吗?目标是在不丢失其格式的情况下访问(例如读取)每个单元格值。

在下面的完整代码中,您还可以看到当其中一列的类型为字符串时也是可能的。有线。

最小工作示例

#!/usr/bin/env python3
import pandas

dfA = pandas.DataFrame({
    'A': [111, 222, 333],
    'B': [1.3, 2.4, 3.5],
})
print(dfA)

dfB = pandas.DataFrame({
    'A': [111, 222, 333],
    'B': [1.3, 2.4, 3.5],
    'C': ['one', 'two', 'three']
})
print(dfB)

print(dfA.loc[0])
print(type(dfA.loc[0].A))

print(dfB.loc[0])
print(type(dfB.loc[0].A))

输出

     A    B
0  111  1.3
1  222  2.4
2  333  3.5

     A    B      C
0  111  1.3    one
1  222  2.4    two
2  333  3.5  three

A    111.0
B      1.3
Name: 0, dtype: float64

<class 'numpy.float64'>

A    111
B    1.3
C    one
Name: 0, dtype: object

<class 'numpy.int64'>

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    由于您只需要读取行,下面是一种使用 Pandas astypeobject 保留混合类型系列格式的方法:

    dfA = dfA.astype(object)
    

    然后:

    print(dfA.loc[0, :])
    # Output
    
    A    111
    B    1.3
    Name: 0, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2018-08-03
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多