由于明显的原因,我想在更新后将列的dtypes保留为int。有什么想法为什么不能按预期工作吗?

import pandas as pd

df1 = pd.DataFrame([
    {'a': 1, 'b': 2, 'c': 'foo'},
    {'a': 3, 'b': 4, 'c': 'baz'},
])

df2 = pd.DataFrame([
    {'a': 1, 'b': 8, 'c': 'bar'},
])

print 'dtypes before update:\n%s\n%s' % (df1.dtypes, df2.dtypes)

df1.update(df2)

print '\ndtypes after update:\n%s\n%s' % (df1.dtypes, df2.dtypes)

输出看起来像这样:
dtypes before update:
a     int64
b     int64
c    object
dtype: object
a     int64
b     int64
c    object
dtype: object

dtypes after update:
a    float64
b    float64
c     object
dtype: object
a     int64
b     int64
c    object
dtype: object

感谢任何有建议的人

最佳答案

这是一个已知的问题。 https://github.com/pydata/pandas/issues/4094我认为您的唯一选择当前是在更新后调用astype(int)

关于python - 为什么pandas.DataFrame.update会更改已更新数据框的dtypes?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28217172/

10-12 22:17