首页 > 解决方案 > 如何在没有标题的情况下转换一列熊猫系列

问题描述

这很奇怪,因为我直到现在才遇到这个问题,用于数据系列的转换。

所以我有不同高度的日期和时间的风速数据,从 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'])

打印将返回如下 -

指数

0 小时-MST

1 1

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循环 验证了它只是第 0 个具有字符串的索引。

我认为原因是因为我sep在读取这些文件时没有使用该参数 - 因为这是与之前尝试其他文件的唯一区别,其中数据转换困扰着我。

然而,它并不一定能启发我如何解决它。

好心提醒。

标签: pandastype-conversion

解决方案


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

推荐阅读