使用dataframes从csv编写函数,以读取和返回python中的列值

2024-10-03 11:12:46 发布

您现在位置:Python中文网/ 问答频道 /正文

csv文件中有以下数据集:

vehicle---time-----aspd[m/s]------gspd[m/s]----hdg---alt[m-msl]

veh_1---17:19.5---0.163471505---0.140000001---213---273.8900146
veh_2---17:19.5---0.505786836---0.170000002---214---273.9100037
veh_3---17:19.8---0.173484877---0.109999999---213---273.980011
veh_4---44:12.4---18.64673424---19.22999954---316---388.9299927
veh_5---44:13.0---18.13533401---19.10000038---316---389.1700134

我正在尝试编写一个带有两个输入(dataframe,vehicle name)的函数launch\u time(),它返回第一次以10.0 m/s以上的速度报告gspd的时间。 输出时间必须从字符串(HH:MM:不锈钢)12:00后一分钟。你知道吗

应该是这样的:

>>> launch_time(df, veh_1)
30.0

我将使用这个函数遍历每一辆车,然后需要将结果记录到一个元组列表中,格式为(v_name,launch time),顺序为launch sequence。你知道吗

应该是这样的:

'veh_1', 30.0, 'veh_2', 15.0 

披露:我的python/pandas知识非常初级。你知道吗


Tags: 文件csv数据函数nametime时间alt
1条回答
网友
1楼 · 发布于 2024-10-03 11:12:46

您可以使用带分隔符的^{}-{3,}读取带有3个或更多-的csv:

import pandas as pd
from pandas.compat import StringIO

temp=u"""vehicle -time  -aspd[m/s]   gspd[m/s]  hdg -alt[m-msl]

veh_1 -17:19.5 -0.163471505 -0.140000001 -213 -273.8900146
veh_2 -17:19.5 -0.505786836 -0.170000002 -214 -273.9100037
veh_3 -17:19.8 -0.173484877 -0.109999999 -213 -273.980011
veh_4 -44:12.4 -18.64673424 -19.22999954 -316 -388.9299927
veh_5 -45:13.0 -18.13533401 -19.10000038 -316 -389.1700134"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep="-{3,}", engine='python')

print (df)
  vehicle     time  aspd[m/s]  gspd[m/s]  hdg  alt[m-msl]
0   veh_1  17:19.5   0.163472       0.14  213  273.890015
1   veh_2  17:19.5   0.505787       0.17  214  273.910004
2   veh_3  17:19.8   0.173485       0.11  213  273.980011
3   veh_4  44:12.4  18.646734      19.23  316  388.929993
4   veh_5  45:13.0  18.135334      19.10  316  389.170013

然后转换列time^{},按^{}^{}过滤10m/s以上的所有行,使用^{}对车辆进行分组,然后得到first value in each group和最后zipvehicletime,并转换为list

df.time = pd.to_timedelta('00:' + df.time, unit='h').\
              astype('timedelta64[m]').astype(int)
req = df[df['gspd[m/s]'] > 10].\
          sort_values('time', ascending=True).\
          groupby('vehicle', as_index=False).head(1)
print(req)
  vehicle  time  aspd[m/s]  gspd[m/s]  hdg  alt[m-msl]
4   veh_5    45  18.135334      19.10  316  389.170013
3   veh_4    44  18.646734      19.23  316  388.929993

L = list(zip(req['vehicle'],req['time']))
print (L)
[('veh_5', 45), ('veh_4', 44)]

相关问题 更多 >