这是一个非常非标准的问题。出于教育目的,我试图在csv文件中创建一个混合类型的列,以便在将数据集导入pandas $this->session->unset_userdata('errors');
中时收到警告消息,然后处理该列以显示其状态完成。
问题是我会在Excel的字符串列中键入0s,保存并关闭文件,但是聪明的熊猫仍然将该列导入为字符串列,因此它实际上并没有检测到漂浮在其中。
我还尝试使用DataFrame
更改熊猫中仅0的格式,然后导出并重新导入。仍然不起作用。
有人知道如何创建一个熊猫将读取混合类型的列吗?
谢谢!
答案 0 :(得分:1)
我正在尝试在csv文件中创建混合类型的列,以便 在熊猫中导入数据集时出现警告消息
Pandas总是会推断出列的类型(Series
对象),而这总是一个单一的类型。如果该列中的每个值都是字符串,那么pandas会将其加载为字符串类型的列。
如果存在无法合理地将其作为字符串,整数加载的“混合”值,则推断的类型将仅为dtype: object
。这也意味着您不会收到任何警告。
您可以通过dtype
参数在加载数据框时强制输入类型。
pd.read_csv("test_file.csv", index_col=0, dtype=int)
现在,大熊猫将尝试将所有内容都转换为int
,如果某些值无法转换为int
,则会出现类似
ValueError:以10为底的int()无效文字:'a'
尝试加载其中包含字符串a
的数据集时。但是,这不会产生警告,操作只会失败。
这是创建混合列的方法。
df = pd.DataFrame()
df["mix"] = ["a", "b", 1, True]
df.to_csv("test_file.csv")
df_again = pd.read_csv("test_file.csv", index_col=0)
print(df_again["mix"])
mix
列的类型是object
...
名称:mix,dtype:object
如果将以上代码中的read_csv
更改为
df_again = pd.read_csv("test_file.csv", index_col=0, dtype=int)
您将收到提到的错误。