当前位置: 首页 > 面试题库 >

熊猫read_csv dtype读取所有列,但很少读取为字符串

陆昊
2023-03-14
问题内容

我正在使用Pandas读取一堆CSV。将选项json传递给dtype参数,以告诉pandas将哪些列读取为字符串而不是默认值:

dtype_dic= { 'service_id':str, 'end_date':str, ... }
feedArray = pd.read_csv(feedfile , dtype = dtype_dic)

在我的场景中,除少数特定列外, 所有 列均应读取为字符串。因此,与其将几列定义为str in
dtype_dic,不如将我选择的几列设置为int或float。有没有办法做到这一点?

这是循环遍历具有不同列的各种CSV的循环,因此在将整个csv读取为字符串(dtype=str)后进行直接列转换将不容易,因为我不会立即知道csv包含哪些列。(我宁愿花精力在dtype
json中定义所有列!)

编辑:但是,如果有一种方法可以处理要转换为数字的列名列表,而不会错误地指出该列不在该csv中,那么是的,如果没有其他方法可以解决这个问题这是在csv阅读阶段本身。


问题答案:

编辑-对不起,我误读了你的问题。更新了我的答案。

您可以将整个csv读取为字符串,然后将所需的列转换为其他类型,如下所示:

df = pd.read_csv('/path/to/file.csv', dtype=str)
# example df; yours will be from pd.read_csv() above
df = pd.DataFrame({'A': ['1', '3', '5'], 'B': ['2', '4', '6'], 'C': ['x', 'y', 'z']})
types_dict = {'A': int, 'B': float}
for col, col_type in types_dict.items():
    df[col] = df[col].astype(col_type)

另一种方法是,如果您确实要在读入文件时为所有列指定正确的类型,而不是在以后更改它们:仅读入列名(无行),然后使用那些来填充应为字符串的列

col_names = pd.read_csv('file.csv', nrows=0).columns
types_dict = {'A': int, 'B': float}
types_dict.update({col: str for col in col_names if col not in types_dict})
pd.read_csv('file.csv', dtype=types_dict)


 类似资料:
  • 问题内容: 我有一个包含字母数字键的数据框,我想另存为csv并在以后读取。由于种种原因,我需要以字符串格式显式读取此键列,所以我使用的键严格地是数字的,甚至更糟,例如:1234E5,Pandas会将其解释为浮点数。这显然使密钥完全无用。 问题是,当我为数据框或其中的任何列指定字符串dtype时,我只会得到垃圾回收。我在这里有一些示例代码: 数据框如下所示: 然后我像这样阅读: 结果是: 这是我的计

  • 我正在从数据库中获取数据,我怀疑其中的所有数据都被简单地设置为string,而不是float、int等。当我将数据导入到pandas dataframe中时,所有数据都显示为字符串。 或 我试过str.isNumeric,但所有内容都显示为非数字。 我能做些什么来检测数值吗?

  • 问题内容: 我正在查询一个SQL数据库,我想使用熊猫来处理数据。但是,我不确定如何移动数据。以下是我的输入和输出。 问题答案: 答案更简短

  • 问题内容: 我正在使用python 3.6并尝试使用以下代码将json文件(350 MB)下载为pandas数据框。但是,出现以下错误: 我该如何解决错误? 问题答案: 如果以二进制()格式打开文件,则会得到字节。怎么样:

  • 如何使用将所有可用字符读入? 编辑 1。委托不关心字符串有多长,它只需要处理通过套接字到达的任何哈达-以及它的全部内容 2。我不需要将数据切成块--我希望读取到达 3的每一个信息。是的,我有一个无限循环,因为我需要保持与套接字的连接并监听数据,直到客户端删除连接-当我获得时。我为套接字使用单独的线程,因为会有更多的套接字要听。

  • 问题内容: 我试图读取通过via 创建的数据框,但得到了。我认为这可能与索引为MultiIndex的事实有关,但我不确定如何处理。 调用了55k行的原始数据框,并通过以下方式创建了该数据框: 如果要使用它,这是输出。 当我对这小部分数据(5行)进行处理时,我得到一个。 这是完整的堆栈: 但是,当我在整个数据帧(55k行)上执行此操作时,我得到一个无效的指针错误,并且IPython内核死亡。有任何想