从字符串Python创建数据帧

从字符串Python创建数据帧,python,pandas,Python,Pandas,如何从如下所示的字符串(字符串的一部分)创建数据帧 ,文件_05,,\r\nx数据,y 数据\r\n-970.0、-34.12164、-959.0、-32.37526、-949.0、-30.360199、-938.0、-28.74816、-929.0、-27.53912、-25.92707、-911.0、-24.31503、-900.0、-23.64334、-891.0、-22.2997、 试图创建一个如下所示的数据帧 您应该使用python将原始数据转换为表 通过使用python导入csv包

如何从如下所示的字符串(字符串的一部分)创建数据帧

,文件_05,,\r\nx数据,y 数据\r\n-970.0、-34.12164、-959.0、-32.37526、-949.0、-30.360199、-938.0、-28.74816、-929.0、-27.53912、-25.92707、-911.0、-24.31503、-900.0、-23.64334、-891.0、-22.2997、

试图创建一个如下所示的数据帧

  • 您应该使用python将原始数据转换为表
  • 通过使用python导入csv包保存到csv文件
  • 您应该使用python将原始数据转换为表
  • 通过使用python导入csv包保存到csv文件

  • 看起来您需要字符串中的多级数据帧。我会这样做的

  • 步骤1:按
    拆分字符串\r\n'
    。然后,对于每个值,按
    ,”
  • 步骤2:上述步骤将创建一个列表。元素#0有4个 项目和元素#1有2个项目。其余各有3项,均为 实际数据
  • 步骤3:从元素#3开始将数据转换为字典。 使用元素2中的值作为字典的键(即
    x数据
    y数据
    )。要确保您有键:[值列表],请使用
    dict.setdefault(键,[]).append(值)
    。这将确保数据的完整性 创建为“键:[值列表]”字典
  • 步骤4:使用字典作为所有 值作为键和值存储在字典中
  • 步骤5:现在您已经有了字典,您想要创建 多索引。将列转换为多索引
  • 综上所述,代码是:

    import pandas as pd
    
    text = ',file_05,,\r\nx data,y data\r\n-970.0,-34.12164,\r\n-959.0,-32.37526,\r\n-949.0,-30.360199,\r\n-938.0,-28.74816,\r\n-929.0,-27.53912,\r\n-920.0,-25.92707,\r\n-911.0,-24.31503,\r\n-900.0,-23.64334,\r\n-891.0,-22.29997,'
    
    line_text = [txt.split(',') for txt in text.split('\r\n')]
    
    dct = {}
    
    for x,y,z in line_text[2:]:
        dct.setdefault(line_text[1][0], []).append(x)
        dct.setdefault(line_text[1][1], []).append(y)
    
    df = pd.DataFrame(dct)
    
    df.columns = pd.MultiIndex.from_tuples([(line_text[0][i],line_text[1][i]) for i in [0,1]])
    
    print (df)
    
    其结果将是:

                  file_05
       x data      y data
    0  -970.0   -34.12164
    1  -959.0   -32.37526
    2  -949.0  -30.360199
    3  -938.0   -28.74816
    4  -929.0   -27.53912
    5  -920.0   -25.92707
    6  -911.0   -24.31503
    7  -900.0   -23.64334
    8  -891.0   -22.29997
    

    看起来您需要字符串中的多级数据帧。我会这样做的

  • 步骤1:按
    拆分字符串\r\n'
    。然后,对于每个值,按
    ,”
  • 步骤2:上述步骤将创建一个列表。元素#0有4个 项目和元素#1有2个项目。其余各有3项,均为 实际数据
  • 步骤3:从元素#3开始将数据转换为字典。 使用元素2中的值作为字典的键(即
    x数据
    y数据
    )。要确保您有键:[值列表],请使用
    dict.setdefault(键,[]).append(值)
    。这将确保数据的完整性 创建为“键:[值列表]”字典
  • 步骤4:使用字典作为所有 值作为键和值存储在字典中
  • 步骤5:现在您已经有了字典,您想要创建 多索引。将列转换为多索引
  • 综上所述,代码是:

    import pandas as pd
    
    text = ',file_05,,\r\nx data,y data\r\n-970.0,-34.12164,\r\n-959.0,-32.37526,\r\n-949.0,-30.360199,\r\n-938.0,-28.74816,\r\n-929.0,-27.53912,\r\n-920.0,-25.92707,\r\n-911.0,-24.31503,\r\n-900.0,-23.64334,\r\n-891.0,-22.29997,'
    
    line_text = [txt.split(',') for txt in text.split('\r\n')]
    
    dct = {}
    
    for x,y,z in line_text[2:]:
        dct.setdefault(line_text[1][0], []).append(x)
        dct.setdefault(line_text[1][1], []).append(y)
    
    df = pd.DataFrame(dct)
    
    df.columns = pd.MultiIndex.from_tuples([(line_text[0][i],line_text[1][i]) for i in [0,1]])
    
    print (df)
    
    其结果将是:

                  file_05
       x data      y data
    0  -970.0   -34.12164
    1  -959.0   -32.37526
    2  -949.0  -30.360199
    3  -938.0   -28.74816
    4  -929.0   -27.53912
    5  -920.0   -25.92707
    6  -911.0   -24.31503
    7  -900.0   -23.64334
    8  -891.0   -22.29997
    

    在下面的代码
    s
    中是字符串:

    import pandas as pd
    from io import StringIO
    
    df = pd.read_csv(StringIO(s)).dropna(axis=1)
    df.rename(columns={df.columns[0]: ""}, inplace=True)
    
    顺便说一句,如果字符串来自csv文件,那么使用
    pd.read\u csv
    直接读取文件就更简单了

    编辑:此代码将创建列的多索引:

    import pandas as pd
    from io import StringIO
    
    df = pd.read_csv(StringIO(s), header = None).dropna(how="all", axis=1).T
    df[0] = df.loc[1, 0]
    df = df.set_index([0, 1]).T
    

    在下面的代码
    s
    中是字符串:

    import pandas as pd
    from io import StringIO
    
    df = pd.read_csv(StringIO(s)).dropna(axis=1)
    df.rename(columns={df.columns[0]: ""}, inplace=True)
    
    顺便说一句,如果字符串来自csv文件,那么使用
    pd.read\u csv
    直接读取文件就更简单了

    编辑:此代码将创建列的多索引:

    import pandas as pd
    from io import StringIO
    
    df = pd.read_csv(StringIO(s), header = None).dropna(how="all", axis=1).T
    df[0] = df.loc[1, 0]
    df = df.set_index([0, 1]).T
    

    OP想要创建一个数据帧而不是写入文件OP想要创建一个数据帧而不是写入文件非常有趣。谢谢分享。我不认为read_csv会计算出第一行的额外逗号。多索引解决方案甚至更好。谢谢你的更新。我打算推荐sameVery有趣的。谢谢分享。我不认为read_csv会计算出第一行的额外逗号。多索引解决方案甚至更好。谢谢你的更新。我打算推荐同样的