python比较月日,python – 从给定日期开始提取日,月和年的最快方法是什么?

我将包含150,000行的csv文件读入pandas数据帧.此数据框有一个字段“日期”,日期格式为yyyy-mm-dd.我想从中提取月,日和年,并分别复制到数据框的列,’月’,’日’和’年’.对于几百条记录,以下两种方法都可以正常工作,但对于150,000条记录,这两种方法都需要花费很长的时间来执行.对于100,000条记录,有更快的方法吗?

第一种方法:

df = pandas.read_csv(filename)

for i in xrange(len(df)):

df.loc[i,'Day'] = int(df.loc[i,'Date'].split('-')[2])

第二种方法:

df = pandas.read_csv(filename)

for i in xrange(len(df)):

df.loc[i,'Day'] = datetime.strptime(df.loc[i,'Date'], '%Y-%m-%d').day

谢谢.

解决方法:

在0.15.0中,您将能够使用新的.dt访问器在语法上做到这一点.

In [36]: df = DataFrame(date_range('20000101',periods=150000,freq='H'),columns=['Date'])

In [37]: df.head(5)

Out[37]:

Date

0 2000-01-01 00:00:00

1 2000-01-01 01:00:00

2 2000-01-01 02:00:00

3 2000-01-01 03:00:00

4 2000-01-01 04:00:00

[5 rows x 1 columns]

In [38]: %timeit f(df)

10 loops, best of 3: 22 ms per loop

In [39]: def f(df):

df = df.copy()

df['Year'] = DatetimeIndex(df['Date']).year

df['Month'] = DatetimeIndex(df['Date']).month

df['Day'] = DatetimeIndex(df['Date']).day

return df

....:

In [40]: f(df).head()

Out[40]:

Date Year Month Day

0 2000-01-01 00:00:00 2000 1 1

1 2000-01-01 01:00:00 2000 1 1

2 2000-01-01 02:00:00 2000 1 1

3 2000-01-01 03:00:00 2000 1 1

4 2000-01-01 04:00:00 2000 1 1

[5 rows x 4 columns]

从0.15.0开始(2014年9月底发布),现在可以使用新的.dt访问器进行以下操作:

df['Year'] = df['Date'].dt.year

df['Month'] = df['Date'].dt.month

df['Day'] = df['Date'].dt.day

标签:python,pandas,datetime,date

来源: https://codeday.me/bug/20190917/1810093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Python提取GPS信息时,我们可以使用多种方法。 第一种方法是使用模块GPSd和GPS3。这两个模块提供了与GPS接收器通信的功能。你可以连接到GPS接收器,并从中获取经纬度、海拔等GPS信息。这种方法的优点是它提供了一个简单的接口,可以速地获取GPS信息。但缺点是它需要一个GPS接收器,而且有可能会受到接收器的限制。 第二种方法是使用模块PySerial。该模块可以帮助你与GPS设备建立串行通信。通过读取设备发送的数据,你可以提取其中的GPS信息。这种方法的好处是它可以与任何串行GPS设备兼容,并且不需要额外的软件支持。但缺点是你需要自己解析接收到的数据,并提取出GPS信息。 第三种方法是使用第三方库,如geopy。该库提供了多种方法来获取和处理GPS信息。你可以使用它来解析GPS坐标、计算两个坐标之间的距离等。这种方法的优点是它提供了许多便利的功能,并且不需要额外的设备或软件支持。但缺点是它可能需要额外的安装和配置,并且有时可能不够灵活。 无论你选择哪种方法,记住要确保你的代码能够正确地连接到GPS设备,并能够正确解析接收到的数据。此外,还要注意处理异常情况,如设备无法连接或接收到无效的数据。 ### 回答2: 在Python中,我们可以使用各种库和模块来提取GPS信息。其中,最常用的库是`gpxpy`和`geopy`。 首先,我们可以使用`gpxpy`库来解析GPX文件,该文件通常包含GPS轨迹数据。我们可以使用`open`函数打开GPX文件,然后使用`GPXTrack`和`GPXTrackSegment`对象来提取轨迹数据。我们可以遍历每个段的点,获取经度(longitude)和纬度(latitude)等信息。 另外,我们还可以使用`geopy`库来提取和处理GPS坐标信息。该库提供了一系列功能,如逆地理编码(从经纬度获取地址)、距离计算、坐标转换等等。我们可以使用`Nominatim`类来进行逆地理编码。给定经度和纬度,我们可以调用该类的`reverse`方法,获取具体的地址。 示例代码如下: ```python # 使用gpxpy库提取GPS信息 import gpxpy def extract_gps_info(filename): gpx_file = open(filename, 'r') gpx = gpxpy.parse(gpx_file) for track in gpx.tracks: for segment in track.segments: for point in segment.points: print('经度:', point.longitude) print('纬度:', point.latitude) # 使用geopy库进行逆地理编码 from geopy.geocoders import Nominatim def reverse_geocoding(lat, lon): geolocator = Nominatim(user_agent="my_app") location = geolocator.reverse(f"{lat}, {lon}") print('地址:', location.address) # 调用函数进行提取和处理 extract_gps_info('track.gpx') reverse_geocoding(51.5074, -0.1278) ``` 通过以上代码,我们可以提取GPX文件中的GPS信息,并且将给定的经纬度转换为具体的地址信息。请注意,你需要在代码中替换实际的GPX文件名和经纬度值。 ### 回答3: Python可以通过使用适当的库和模块来提取GPS信息。其中最常用的库是`gpsd`。 首先,需要在系统中安装`gpsd`库。可以使用以下命令安装: `pip install gpsd-py3` 然后,可以使用以下代码来提取GPS信息: ```python import gpsd # 连接到GPS gpsd.connect() # 获取GPS信息 packet = gpsd.get_current() # 提取所需信息 latitude = packet.position()[0] # 获取纬度 longitude = packet.position()[1] # 获取经度 altitude = packet.altitude() # 获取海拔 speed = packet.speed() # 获取速度 time = packet.time() # 获取时间 # 打印提取的信息 print("纬度:", latitude) print("经度:", longitude) print("海拔:", altitude) print("速度:", speed) print("时间:", time) ``` 此代码将连接到GPS设备并获取当前的GPS信息。然后,从返回的数据包中提取所需的信息,如纬度、经度、海拔、速度和时间。最后,将提取的信息打印出来。 此外,还可以使用其他库,如`pyserial`和`pynmea2`,来解析NMEA格式的GPS数据。这些库可以用于连接到GPS设备并从串口接收和解析GPS数据。 总之,通过使用适当的Python库和模块,可以很容易地提取和处理GPS信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值