我有一个初始文件'data_points_20180101.txt',其中的数据具有以下格式:
Latitude: 30°02′59″S -30.04982864
Longitude: 51°12′05″W -51.20150245
Distance: 2.2959 km Bearing: 137.352°
Latitude: 30°04′03″S -30.06761588
Longitude: 51°14′23″W -51.23976111
Distance: 4.2397 km Bearing: 210.121°
Latitude: 30°03′21″S -30.05596474
Longitude: 51°10′22″W -51.17286827
Distance: 4.9213 km Bearing: 118.814°
(...)
我需要一个只有第二个纬度和经度值的DataFrame。
使用以下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_fwf('data_points_20180101.txt', colspecs=[(0,9),(10,21),(21,38)], header=None)
df = df[~df[0].str.contains('Distance:')]
df = df.drop(columns=[1])
df = df.pivot(columns=0, values=2)
我将数据更改为以下格式:
Latitude Longitude
0 -30.04982864 NaN
1 NaN -51.20150245
3 -30.06761588 NaN
4 NaN -51.23976111
6 -30.05596474 NaN
... ... ...
2988 NaN -51.18562751
2990 -30.01986809 NaN
2991 NaN -51.18678828
2993 -30.00657367 NaN
2994 NaN -51.25739042
但是以这种格式,纬度/经度对不在同一行。如何用下一行的正确值替换每一行的NaN值,例如:
Latitude Longitude
0 -30.04982864 -51.20150245
1 -30.06761588 -51.23976111
答案 0 :(得分:4)
您可以尝试:
df['Longitude'] = df['Longitude'].bfill()
df = df.dropna()
或单线:
df = df.assign(Longitude=df.Longitude.bfill()).dropna()
答案 1 :(得分:0)
如果您确定表的结构完全像这样,则可以简单地将数据集加载到两个表中以行交替的形式:
df_lat = df.iloc[::2, :]
df_lon = df.iloc[1::2, :]
然后沿 axis = 1 连接它们。使用适当的列命名,您将获得所需的内容。