我从11个列表中创建一个数据框。这些列表中有四个是整数列表,其余七个是浮点列表。我使用以下所有11个列表创建了一个数据框
df = pd.DataFrame({ col_headers[0] : pd.Series(upper_time, dtype='float'),
col_headers[1] : pd.Series(upper_pres, dtype='float'),
col_headers[2] : pd.Series(upper_indx, dtype='int'),
col_headers[3] : pd.Series(upper_pulses, dtype='int'),
col_headers[4] : pd.Series(median_upper_pulses, dtype='float'),
col_headers[5] : pd.Series(lower_time, dtype='float'),
col_headers[6] : pd.Series(lower_pres, dtype='float'),
col_headers[7] : pd.Series(lower_indx, dtype='int'),
col_headers[8] : pd.Series(lower_pulses, dtype='int'),
col_headers[9] : pd.Series(median_lower_pulses, dtype='float'),
col_headers[10] : pd.Series(median_both_pulses, dtype='float')
})
不幸的是,当我键入df.dtypes时。我得到
df.dtypes
Upper Systole Time float64
Upper Systole Pressure float64
Upper Systole Index int32
Upper Systole Pulses int32
Median Upper Systolic Pulses float64
Lower Systole Time float64
Lower Systole Pressure float64
Lower Systole Index float64
Lower Systole Pulses float64
Median Lower Systolic Pulses float64
Median Both Systolic Pulses float64
dtype: object
上收缩指数,下收缩指数,上收缩脉冲和下收缩脉冲都应为整数(如果我检查相关列表中每个元素的类型,则为整数)。但是以某种方式,当我创建一个数据框时,尽管我明确地将其保留为整数,但四个整数中的两个仍被强制浮动。
我怀疑这与以下事实有关:列表0-4的长度是一个长度,列表5-10的长度是不同的,但是很多Google搜索和StackOverflow搜索都没有给出答案。
如何确保自己的积分仍然是整数?
答案 0 :(得分:0)
如果您执行以下操作:
pd.DataFrame({"A":pd.Series([1,2,3,4], dtype='int'),
"B": pd.Series([1,3], dtype='int')}).astype(int)
您将收到以下错误:
867 if not np.isfinite(arr).all():
--> 868 raise ValueError("Cannot convert non-finite values (NA or inf) to integer")
869
870 elif is_object_dtype(arr):
ValueError: Cannot convert non-finite values (NA or inf) to integer
这表明问题出在NaN的存在。
如果要将NaN值转换为整数,例如0,那么您应该可以使用.astype(int)
将指定的列强制转换为整数
示例:
df = pd.DataFrame({"A":pd.Series([1,2,3,4], dtype='int'),
"B": pd.Series([1,3], dtype='int')})
df["B"] = df["B"].fillna(0).astype(int)
答案 1 :(得分:0)
filippo, 非常感谢您-dytpe ='Int64'用大写的'I'完成了。我没有意识到这一点,它很好地写在https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html上,其中指出pd.Int64Dtype()别名为'Int64'。
再次感谢
托马斯·飞利浦