我读取我的pandas数据框架为:
ERA5RS12 = pd.read_csv('F:/ERA5_RS/[12]-PIRATA-2017_20171127_100021/wspd_hl.csv')
ERA5RS12
输出是
我想要这样的:
经度,纬度,价值,水平
33岁的9 20
8.4,33岁的9 10 40
33岁的9 11100
确保CSV文件的分隔符为,
。否则,您可以在调用pd.read_csv
时指定与参数sep
对应的自定义分隔符。参考文档
:根据你提供的Excel文件,我将其转换为CSV格式。下面是生成所需内容的代码片段。
import pandas as pd
with open("wspd_hl.csv", "r") as f:
lines = [line.strip() for line in f.readlines()]
df = pd.DataFrame(columns=lines[0].split(" "))
for i, line in enumerate(lines[1:], 1):
if i % 2 == 1:
line = line.replace(",", "")
df.loc[len(df)] = [value for value in line.split(" ") if value.strip() != ""]
输出:
如果我是你,我会编写自己的读取器来读取这样的数据。使用下面的代码,您可以在header
列表中使用列名,在lines
列表中使用表行。
with open('test.csv', 'r') as file:
header = []
lines = []
for i, line in enumerate(file):
if i == 0:
header = line.split()
continue
if i % 2 == 0:
continue
lines.append(line.split())
处理数据时,可以轻松创建pd.DataFrame
,并清理数据。
df = pd.DataFrame(lines, columns=header)
df['Value'] = df.Value.str.strip(',').astype(float)
结果如下:
>> df.head()
Latitude Longitude Value level
0 9.000 321.990 6.6732 20
1 9.000 321.990 6.8282 30
2 9.000 321.990 6.9814 50
3 9.000 321.990 7.0756 70
4 9.000 321.990 7.1705 100
编辑
如果你想重用上面的代码,你可以把它包装起来并创建一个函数。
def read_data(csv_file_path: str) -> pd.DataFrame:
"""Read data, process them and return data frame."""
with open(csv_file_path, 'r') as file:
header = []
lines = []
for i, line in enumerate(file):
if i == 0:
header = line.split()
continue
if i % 2 == 0:
continue
lines.append(line.split())
df = pd.DataFrame(lines, columns=header)
df['Value'] = df.Value.str.strip(',').astype(float)
return df
那么函数可以这样使用。
>> df = read_data('/path/to/test.csv')
>> df.head()
Latitude Longitude Value level
0 9.000 321.990 6.6732 20
1 9.000 321.990 6.8282 30
2 9.000 321.990 6.9814 50
3 9.000 321.990 7.0756 70
4 9.000 321.990 7.1705 100