我似乎无法找到.loc行为背后的原因.我知道它是基于标签的,所以如果我遍历Index对象,下面的最小例子应该可行.但事实并非如此.我当然用Google搜索,但我需要一些已经掌握索引的人的其他解释.
import datetime
import pandas as pd

dict_weekday = {1: 'MON',2: 'TUE',3: 'WED',4: 'THU',5: 'FRI',6: 'SAT',7: 'SUN'}
df = pd.DataFrame(pd.date_range(datetime.date(2014,1,1),datetime.date(2014,15),freq='D'),columns=['Date'])
df['Weekday'] = df['Date'].apply(lambda x: dict_weekday[x.isoweekday()])

for idx in df.index:
    print df.loc[idx,'Weekday']

解决方法

问题不在于df.loc;
df.loc [idx,’Weekday’]刚刚返回一个系列.
令人惊讶的行为是由于pd.Series尝试将类似日期时间的值转换为Timestamps的方式.
df.loc[0,'Weekday']

形成系列

pd.Series(np.array([pd.Timestamp('2014-01-01 00:00:00'),'WED'],dtype=object))

当调用pd.Series(…)时,它将tries to cast the data转换为适当的dtype.

如果您浏览代码,您会发现它最终到达these lines in pandas.core.common._possibly_infer_to_datetimelike:

sample = v[:min(3,len(v))]
inferred_type = lib.infer_dtype(sample)

这是检查数据的前几个元素并尝试推断dtype.
当其中一个值是pd.Timestamp时,Pandas会检查是否所有数据都可以转换为时间戳.实际上,’Wed’可以转换为pd.Timestamp:

In [138]: pd.Timestamp('Wed')
Out[138]: Timestamp('2014-12-17 00:00:00')

这是问题的根源,导致pd.Series返回
两个时间戳而不是时间戳和字符串:

In [139]: pd.Series(np.array([pd.Timestamp('2014-01-01 00:00:00'),dtype=object))
Out[139]: 
0   2014-01-01
1   2014-12-17
dtype: datetime64[ns]

因此返回

In [140]: df.loc[0,'Weekday']
Out[140]: Timestamp('2014-12-17 00:00:00')

而不是’星期三’.

替代方案:首先选择系列df [‘Weekday’]:

有很多解决方法; EdChum表明,向样本添加非日期(整数)值可以防止pd.Series将所有值强制转换为时间戳.

或者,您可以在使用.loc之前访问df [‘Weekdays’]:

for idx in df.index:
    print df['Weekday'].loc[idx]

替代方案:df.loc [[idx],’Weekday’]:

另一种选择是

for idx in df.index:
    print df.loc[[idx],'Weekday'].item()

df.loc [[idx],’Weekday’]首先选择DataFrame df.loc [[idx]].例如,当idx等于0时,

In [10]: df.loc[[0]]
Out[10]: 
        Date Weekday
0 2014-01-01     WED

而df.loc [0]返回系列:

In [11]: df.loc[0]
Out[11]: 
Date      2014-01-01
Weekday   2014-12-17
Name: 0,dtype: datetime64[ns]

Series尝试将值转换为单个有用的dtype. DataFrame可以为每列提供不同的dtype.因此,Date列中的Timestamp不会影响Weekday列中值的dtype.

因此,使用返回DataFrame的索引选择器可以避免问题.

替代方案:使用整数作为工作日

另一种方法是在工作日存储isoweekday整数,并在打印时仅在结尾处转换为字符串:

import datetime
import pandas as pd

dict_weekday = {1: 'MON',columns=['Date'])
df['Weekday'] = df['Date'].dt.weekday+1   # add 1 for isoweekday

for idx in df.index:
    print dict_weekday[df.loc[idx,'Weekday']]

替代方案:使用df.ix:

df.loc是_Locindexer,而df.ix是_IXIndexer.他们有
不同的__getitem__方法.如果您单步执行代码(例如,使用pdb),您将找到df.ix calls df.getvalue

def __getitem__(self,key):
    if type(key) is tuple:
        try:
            values = self.obj.get_value(*key)

并且DataFrame方法df.get_value成功返回’WED’:

In [14]: df.get_value(0,'Weekday')
Out[14]: 'WED'

这就是为什么df.ix是另一种在这里工作的选择.

python – pandas:用loc迭代DataFrame索引的更多相关文章

  1. 视频流 – 使用视频工具箱解码iOS 8中的h264

    需要解码h264流并获取像素缓冲区我知道iOS8上的视频工具箱可能1.如何将h264流转换为CMSampleBufferRef?

  2. ios – 访问文件属性与访问sqlite记录

    >看到上述结果后,我决定选择attributesOfItemAtPath方法.还有什么我不是考虑传递sqlite?

  3. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  4. ios – NSTimeInterval到unix时间戳

    我从cmmotionmanager获取CMDeviceMotion对象.CMDeviceMotion的一个属性是时间戳,表示为NSTimeInterval.根据文档,这允许“亚毫秒”时间戳精度.不幸的是,NSTimeInterval是自上次设备启动以来计算的,对以原始形式使用它提出了重大挑战.有没有人有一个工作代码将此NSTimeInterval转换为类似时间戳的Unix?解决方法在将磁力计值与CoreMotion事件进行比较时,我遇到了类似的问题.如果要转换这些NSTimeIntervals,您只需要计

  5. ios – 更改JSQMessagesViewController中的时间戳逻辑

    SOMessaging一天一天怎么样?

  6. 如何从iOS中的CMSampleBufferRef获取相机数据当前捕获的时间戳

    我开发和iOS应用程序,将捕获的相机数据保存到一个文件,我使用捕获CMSampleBufferRef,并将编码为H264格式,帧将使用AVAssetWriter保存到文件.我遵循示例源代码来创建此应用程序:http://www.gdcl.co.uk//2013/02/20/iOS-Video-Encoding.html现在我想获得保存的视频帧的时间戳来创建一个新的电影文件,为此我做了以下事情1)找

  7. ios – 如何维护两个不同设备之间的时钟会话?

    我正在研究iOS应用程序,它需要在接受两个设备用户时在两个设备之间维持时钟计时器会话?但我不确定如何在两台设备上都没有时间缺陷的情况下实现这一目标?

  8. Swift开发用到的一些工具类

  9. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  10. Swift&Cocoa实战之数据类型:时间日期

    时间日期NSDate在Objective-C中,可以使用如下的代码创建一个UTC的时间:但是在Swift中,如果使用如下方式:获取到的会是本地时间。

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部