【发布时间】:2020-04-02 10:05:41
【问题描述】:
我见过Insert rows into pandas DataFrame while maintaining column data types,我知道
由于 NaN 是浮点数,将 NaN 添加到系列可能会导致它向上转换为浮点数或转换为对象。
...但我无法从这些帖子中真正看出我的用例是否有解决方案:
所以,我想动态构建一个 pandas DataFrame,从一个已定义的列开始,然后添加更多列 - 全部包含整数数据;因此,显然某些行值将是未定义的,即 NaN。这是一个简短的例子:
import pandas as pd
print("pandas.__version__ {}".format(pd.__version__))
# initialize dataframe with one column
test_df = pd.DataFrame(columns=["time"])
# "append column" - add data with a newly defined column
test_df = test_df.append({'time': 20, 'varA': 14}, ignore_index=True)
# (same)
test_df = test_df.append({'time': 5673547, 'varB': 78}, ignore_index=True)
# (same)
test_df = test_df.append({'time': 9480530495459073, 'varC': 4567457}, ignore_index=True)
print(test_df)
print(test_df.astype(pd.Int64Dtype()))
打印出来:
pandas.__version__ 1.0.2
time varA varB varC
0 20 14.0 NaN NaN
1 5.67355e+06 NaN 78.0 NaN
2 9.48053e+15 NaN NaN 4567457.0
time varA varB varC
0 20 14 <NA> <NA>
1 5673547 <NA> 78 <NA>
2 9480530495459072 <NA> <NA> 4567457
所以,虽然我可以通过将 DataFrame 构建为浮点数来解决这个问题,然后将其转换为整数 - 请注意我已经指定了 9480530495459073 - 但是,在转换之后,我得到了 9480530495459072 打印,这是一个不可接受的错误对于我的用例。
我是否有任何其他选项来构建这样的 DataFrame(使用整数数据,并动态添加新列 - 这将导致丢失/未定义/NaN 值),以便它在内部使用整数? (或者可能在内部使用其他数据类型,只要我不丢失整数精度?)
【问题讨论】: