处理错误“TypeError: Expected tuple, got str”将 CSV 加载到 pandas 多级和多索引 (pandas)

2024-05-30

我正在尝试加载 CSV 文件(这个文件 https://drive.google.com/file/d/13a_eVeSzy6HkhffQw32S57U-hm5YCj0-/view?usp=sharing)创建一个多索引多级数据帧。它有5(五)指标 and 3(三)级在列中。

我该怎么办?这是代码:

df = pd.read_csv('./teste.csv'
                  ,index_col=[0,1,2,3,4]
                  ,header=[0,1,2,3]
                  ,skipinitialspace=True
                  ,tupleize_cols=True)

df.columns = pd.MultiIndex.from_tuples(df.columns)

预期输出:

variables                                                u                  \
level                                                    1                   
days                                                     1               2   
times                                                  00h 06h 12h 18h 00h   
wsid lat        lon        start               prcp_24                       
329  -43.969397 -19.883945 2007-03-18 10:00:00 72.0      0   0   0   0   0   
                           2007-03-20 10:00:00 104.4     0   0   0   0   0   
                           2007-10-18 23:00:00 92.8      0   0   0   0   0   
                           2007-12-21 00:00:00 60.4      0   0   0   0   0   
                           2008-01-19 18:00:00 53.0      0   0   0   0   0   
                           2008-04-05 01:00:00 80.8      0   0   0   0   0   
                           2008-10-31 17:00:00 101.8     0   0   0   0   0   
                           2008-11-01 04:00:00 82.0      0   0   0   0   0   
                           2008-12-29 00:00:00 57.8      0   0   0   0   0   
                           2009-03-28 10:00:00 72.4      0   0   0   0   0   
                           2009-10-07 02:00:00 57.8      0   0   0   0   0   
                           2009-10-08 00:00:00 83.8      0   0   0   0   0   
                           2009-11-28 16:00:00 84.4      0   0   0   0   0   
                           2009-12-18 04:00:00 51.8      0   0   0   0   0   
                           2009-12-28 00:00:00 96.4      0   0   0   0   0   
                           2010-01-06 05:00:00 74.2      0   0   0   0   0   
                           2011-12-18 00:00:00 113.6     0   0   0   0   0   
                           2011-12-19 00:00:00 90.6      0   0   0   0   0   
                           2012-11-15 07:00:00 85.8      0   0   0   0   0   
                           2013-10-17 00:00:00 52.4      0   0   0   0   0   
                           2014-04-01 22:00:00 72.0      0   0   0   0   0   
                           2014-10-20 06:00:00 56.6      0   0   0   0   0   
                           2014-12-13 09:00:00 104.4     0   0   0   0   0   
                           2015-02-09 00:00:00 62.0      0   0   0   0   0   
                           2015-02-16 19:00:00 56.8      0   0   0   0   0   
                           2015-05-06 17:00:00 50.8      0   0   0   0   0   
                           2016-02-26 00:00:00 52.2      0   0   0   0   0   

我需要处理错误“TypeError:预期元组,得到 str”:

TypeError: Expected tuple, got str

您收到错误,因为某些列不是元组,它们是索引中的字符串2368 to 2959 in df.columns.
列是字符串的索引:

df.columns[2368:2959]
Index(['('z', '1', '1', '00h').1', '('z', '1', '1', '06h').1',
       '('z', '1', '1', '12h').1', '('z', '1', '1', '18h').1',
       '('z', '1', '2', '00h').1', '('z', '1', '2', '06h').1',
       '('z', '1', '2', '12h').1', '('z', '1', '2', '18h').1',
       '('z', '1', '3', '00h').1', '('z', '1', '3', '06h').1',
       ...
       '('z', '1000', '2', '06h').1', '('z', '1000', '2', '12h').1',
       '('z', '1000', '2', '18h').1', '('z', '1000', '3', '00h').1',
       '('z', '1000', '3', '06h').1', '('z', '1000', '3', '12h').1',
       '('z', '1000', '3', '18h').1', '('z', '1000', '4', '00h').1',
       '('z', '1000', '4', '06h').1', '('z', '1000', '4', '12h').1'],
      dtype='object', length=591)

由于您想要使用元组的多索引列数据框,因此我们首先通过使用必要的子字符串来清理这些字符串re.findall with regex pattern = '(\(.*?\)).'然后将该值传递给ast.literal_eval用于自动将字符串转换为元组。最后,使用pd.MultiIndex.from_tuples as:

df = pd.read_csv('teste.csv',index_col=[0,1,2,3,4],header=[0,1,2,3],parse_dates=True)

import re
import ast

column_list = []
for column in df.columns:
    if isinstance(column,str):
        column_list.append(ast.literal_eval(re.findall('(\(.*?\)).',column)[0]))
    else:
        column_list.append(column)


df.columns = pd.MultiIndex.from_tuples(column_list,
                                       names=('variables', 'level','days','times'))

print(df.iloc[:,:6].head())
variables                                                u                    
level                                                    1                    
days                                                     1               2    
times                                                  00h 06h 12h 18h 00h 06h
wsid lat        lon        start               prcp_24                        
329  -43.969397 -19.883945 2007-03-18 10:00:00 72.0      0   0   0   0   0   0
                           2007-03-20 10:00:00 104.4     0   0   0   0   0   0
                           2007-10-18 23:00:00 92.8      0   0   0   0   0   0
                           2007-12-21 00:00:00 60.4      0   0   0   0   0   0
                           2008-01-19 18:00:00 53.0      0   0   0   0   0   0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理错误“TypeError: Expected tuple, got str”将 CSV 加载到 pandas 多级和多索引 (pandas) 的相关文章

  • 如何融化数据框以获取范围内的所有日期?

    我有一个这样的数据集 import pandas as pd pd DataFrame col1 1 2 start date 1 3 2019 1 10 2019 end date 1 5 2019 1 12 2019 我想为开始日期和结
  • Python setup.py 运行 shell 脚本

    我需要在创建 Python 包时在 sdist 阶段运行我自己的脚本 我写了以下脚本 你知道更好的方法吗 您能否推荐更好的一个或链接到 setuptools 的官方文档 其中已解释了这一时刻 import subprocess import
  • 十六进制转储文件的Pythonic方式

    我的问题很简单 有什么方法可以用 bash 命令以 Python 方式进行编码吗 hexdump e 2 1 02x file dat 显然 不使用 os popen 或任何快捷方式 编辑 虽然我没有明确指定 但如果代码在 Python3
  • 使用 Flask 在 Python 中进行长轮询

    我正在尝试在 Flask 框架下使用 JQuery 和 Python 进行长轮询 之前在 PHP 中做过长轮询 我尝试过以同样的方式进行 具有 while true 循环的脚本 函数 定期检查数据库中的更改 例如每 0 5 秒 并在发生更改
  • 将行转换为 pandas 中逗号分隔的字符串

    我有一个熊猫数据框 from pandas import DataFrame import pandas as pd df2 DataFrame a one one two two three two one six b x y z y x
  • 如何从sqlalchemy中的select语句创建新表?

    我正在使用 sqlalchemy 的核心功能来编写一些抽象层 该层本身需要能够从 select 语句创建表 示例代码 metadata MetaData bind engine table Table table name metadata
  • Python Turtle 未按照文档示例填充

    我试图向我女儿展示一些代码 并认为海龟会很有趣 我更喜欢数字 但这对孩子们来说并不有趣 我在重现文档示例时遇到问题 这更让我烦恼 因为我无法弄清楚 我们还有很多其他事情可以做 The documentation example copied
  • 如何设置appache2的WSGI与python 3.7一起使用?

    我使用的是 ubuntu 16 04 并安装了 python 3 7 并使用以下说明将其设置为默认值 无法在 ubuntu 中将默认 python 版本设置为 python3 https stackoverflow com question
  • AttributeError:模块“rest_framework.serializers”没有属性“NullBooleanField”

    升级后djangorest框架 https pypi org project djangorestframework from djangorestframework 3 13 1 to djangorestframework 3 14 0
  • 如何在不使用太多内存的情况下打乱大型 csv 文件的行并将结果写入新的 csv 文件?

    因此 如果我有一个 csv 文件 如下所示 User Gender A M B F C F 然后我想编写另一个 csv 文件 其中行像这样打乱 作为示例 User Gender C F A M B F 我的问题是我不知道如何随机选择行并确保
  • 致命Python错误:init_import_size:无法在Anaconda Prompt中导入站点模块

    当我启动 Anaconda Prompt 时 收到以下错误消息 致命 Python 错误 init import size 无法导入站点模块 Python运行时状态 已初始化回溯 最近一次调用最后一次 文件 C Users blue App
  • 带有 pygame 的 Pyinstaller

    我曾多次尝试使用 PyInstaller 来捆绑我的 Python2 程序 但它似乎从未与 Pygame 模块一起使用 我已经看到了有关此主题的许多其他问题 但我找不到任何有用的答案 有人知道这个问题的解决方案吗 我正在尝试在 Ubuntu
  • 使用 Opencv 屏蔽水平线和垂直线

    我正在尝试删除该图像中的水平线和垂直线 以便拥有更清晰的文本区域 我正在使用下面的代码 它遵循这个guide https docs opencv org 3 2 0 d1 dee tutorial moprh lines detection
  • 如何正确转义 CSV 中的双引号?

    我的 CSV 中有这样一行 Samsung U600 24 10000003409 1 10000003427 旁边引用24用于表示英寸 而该引号旁边的引号则关闭该字段 我正在读这行fgetcsv但解析器犯了一个错误 并将该值读取为 Sam
  • 如何在不重复代码的情况下定义 randint 元组?

    我经常使用 randint 元组来表示颜色值等 a b c randint 0 255 randint 0 255 randint 0 255 当我认为必须有更好的方法时 有吗 使用numpy 1 import numpy as np tu
  • django 返回记录的最近日期

    我正在尝试从用户的多个记录中返回最近的日期 当用户创建文档时 创建日期存储在 CreatedDocumentDetails 模型中 我无法返回用户最近创建的文档的日期 我问这个关于SO的问题 https stackoverflow com
  • 创建将一把小提琴按色调分割的小提琴图的正确方法是什么?

    创建将一把小提琴分开的小提琴图的正确方法是什么hue 我尝试了不同的方法 似乎唯一的方法是创建一个为数据集中的每个条目共享相同值的功能 并将该功能的名称传递为x fig plt figure figsize 20 8 fig add sub
  • Scipy odeint 非负解

    显然 从 ODE 求解器获得非负解并非易事 https stackoverflow com questions 6977107 solving a delay differential equation dde system constra
  • “from-import”是否执行整个模块?

    好的 所以我知道from import与 完全 相同import 但这显然不是因为命名空间的填充方式不同 我的问题主要是因为我有一个utils我的应用程序中的每个其他模块都使用一个或两个函数的模块 我正在努力合并标准库logging模块 据
  • Pandas 如何删除包含所需字符串的行

    我想删除包含所需字符串的所有行 假设我有以下数据框 A B C 1 a x w g n 3 l p j p v 我想删除包含字符串的所有行p 我已经搜索过它 但大多数答案都是基于列名称 就我而言 我不会知道它可以出现在任何列中 输出数据帧应

随机推荐