代码之家  ›  专栏  ›  技术社区  ›  dia

如何转换不带标题的pandas系列的列

  •  1
  • dia  · 技术社区  · 7 年前

    这很奇怪,因为我直到现在才经历过数据序列转换的问题。

    所以我有不同高度的风速数据,从NREL中获取。

    file09 = 'wind/wind_yr2009.txt'
    wind09 = pd.read_csv(file09, encoding = "utf-8", names = ['DATE (MM/DD/YYYY)', 'HOUR-MST', 'AWS@20m [m/s]', 'AWS@50m [m/s]', 'AWS@80m [m/s]', 'AMPLC(2-80m)'])
    
    file10 = 'wind/wind_yr2010.txt'
    wind10 = pd.read_csv(file10, encoding = "utf-8", names = ['DATE (MM/DD/YYYY)', 'HOUR-MST', 'AWS@20m [m/s]', 'AWS@50m [m/s]', 'AWS@80m [m/s]', 'AMPLC(2-80m)'])
    

    我合并了下面两个.txt文件的读数

    wind = pd.concat([wind09, wind10], join='inner')
    

    然后删除重复的标题。。

    wind = wind.reset_index().drop_duplicates(keep='first').set_index('index')
    
    print(wind['HOUR-MST'])
    

    指数

    11个

    2 2个

    起初我不确定,但很明显索引0在HOUR-MST上,这是列标题。Python可以识别它,因为我可以使用特定的头推断列数据。但是,当我试图转换成 int

    temp = hcodebook.iloc[wind['HOUR-MST'].astype(int) - 1]
    

    两个错误都被返回,因为我稍后试图转换为 float

    ValueError: invalid literal for int() with base 10: 'HOUR-MST'
    ValueError: could not convert string to float: 'HOUR-MST'
    

    我通过使用 try/except 在里面 for

    我想原因是我没有使用参数 sep 当读取这些文件时-因为这是与以前尝试读取其他文件的唯一区别,在这些文件中,数据转换让我感到不安。

    但它不一定能启发我如何解决这个问题。

    请告知。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Scott Boston    7 年前

    MCVE公司:

    from io import StringIO
    import pandas as pd
    
    cfile = StringIO("""A  B  C  D
    1  2  3  4
    5  6  7  8""")
    
    pd.read_csv(cfile, names=['a','b','c','d'], sep='\s\s+')
    

       a  b  c  d
    0  A  B  C  D
    1  1  2  3  4
    2  5  6  7  8
    

    使用 skiprows 要避免获取标题:

    from io import StringIO
    import pandas as pd
    ​
    cfile = StringIO("""A  B  C  D
    1  2  3  4
    5  6  7  8""")
    
    pd.read_csv(cfile, names=['a','b','c','d'], sep='\s\s+', skiprows=1)
    

       a  b  c  d
    0  1  2  3  4
    1  5  6  7  8