使用python / pandas将具有不同索引的行分组的问题

时间:2019-12-02 15:39:57

标签: python pandas dataframe

我有一个初始文件'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

2 个答案:

答案 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 连接它们。使用适当的列命名,您将获得所需的内容。