pandas - 如何在没有标题的情况下转换一列熊猫系列
问题描述
这很奇怪,因为我直到现在才遇到这个问题,用于数据系列的转换。
所以我有不同高度的日期和时间的风速数据,从 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
在读取这些文件时没有使用该参数 - 因为这是与之前尝试其他文件的唯一区别,其中数据转换困扰着我。
然而,它并不一定能启发我如何解决它。
好心提醒。
解决方案
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
推荐阅读
- go - 转到 := 语法左侧的预期标识符
- c# - 在 C# 8 中使用它进行赋值之前,如何检查 Null 的对象属性?
- postgresql - 无法在 postgres 容器中运行脚本
- reactjs - 如何实现 react-native-data-table?
- python - 使用 Python 在 Twitter 上发布 Selenium。我无法获得带有任何硒定位元素的按钮
- c - Can't get while loop to work 2 times? (C)
- spring - Spring MVC form:select selection from database issue
- jpa - 使用带有 jpa NamedStoredProcedureQuery 的 sybase 存储过程
- javascript - 如何使用 javascript 将带有数组的对象加入到单个数组中?
- python - Python 使用带有 for 循环的三元运算符