很奇怪,因为到目前为止我还没有遇到过有关数据序列转换的问题。
因此我从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
-因为这与之前其他尝试进行数据转换的其他文件的唯一区别。
但是,它不一定能使我了解如何解决它。
请告知。
答案 0 :(得分:2)
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