【问题标题】:Converting a multiline string to a dataframe将多行字符串转换为数据框
【发布时间】:2017-08-21 15:47:11
【问题描述】:

我有以下string

Hoy
1
5
14
3
0
23

我想把它变成一个df。

我认为先转到list(string) 然后pd.Dataframe(list(string)) 是个好主意,但是当我转到列表时会返回以下输出:

['\n', 'H', 'o', 'y', '\n', '1', '\n', '5', '\n', '1', '4', '\n', '3', '\n', '0', '\n', '2', '3', '\n', '2', ',', '8', '3', '*', '\n']

是否有另一种方法可以将初始字符串转换为像这样的 df?:

     0
0   Hoy
1   1
2   5
3   14
4   3
5   0
6   23

【问题讨论】:

    标签: python string pandas dataframe


    【解决方案1】:

    使用pd.read_csv,向它传递一个IO缓冲区:

    from up import StringIO
    
    text = '''Hoy
    1
    5
    14
    3
    0
    23
    '''   
    
    pd.read_csv(StringIO(text), header=None)
         0
    0  Hoy
    1    1
    2    5
    3   14
    4    3
    5    0
    6   23
    

    【讨论】:

      【解决方案2】:

      这应该作为接受@COLDSPEED 答案的论据,通过观察这个答案有多丑陋。

      txt = """Hoy
      1
      5
      14
      3
      0
      23"""
      
      (lambda x: pd.Series(pd.to_numeric(x[1:], 'ignore'), name=x[0]))(
          txt.split('\n')
      ).to_frame()
      
         Hoy
      0    1
      1    5
      2   14
      3    3
      4    0
      5   23
      

      【讨论】:

      • 天哪……太丑了! :D
      • 尽管如此丑陋,但这仅适用于 2020 年,因为 StringIO 不再在 pd.compat
      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 2022-11-04
      • 2020-01-20
      • 1970-01-01
      • 2014-08-28
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多