小编AZh*_*hao的帖子

pandas iloc vs ix vs loc解释; 他们有什么不同?

有人能解释这三种切片方法有何不同?
我已经看过这些文档了,我已经看到了这些 答案,但我仍然发现自己无法解释三者是如何不同的.对我来说,它们在很大程度上似乎是可以互换的,因为它们处于较低的切片水平.

例如,假设我们想获得a的前五行DataFrame.这三个都是如何运作的?

df.loc[:5]
df.ix[:5]
df.iloc[:5]
Run Code Online (Sandbox Code Playgroud)

有人可以提出三种情况,其中使用的区别更清晰吗?

python indexing dataframe pandas

574
推荐指数
3
解决办法
42万
查看次数

在seaborn barplot中绘制value_counts()

我无法在海边拍摄一个画布.这是我可重复的数据:

people = ['Hannah', 'Bethany', 'Kris', 'Alex', 'Earl', 'Lori']
reputation = ['awesome', 'cool', 'brilliant', 'meh', 'awesome', 'cool']
dictionary = dict(zip(people, reputation))
df = pd.DataFrame(dictionary.values(), dictionary.keys())
df = df.rename(columns={0:'reputation'})
Run Code Online (Sandbox Code Playgroud)

然后我想得到一个条形图,显示不同声誉的价值计数.我试过了:

sns.barplot(x = 'reputation', y = df['reputation'].value_counts(), data = df, ci = None)
Run Code Online (Sandbox Code Playgroud)

sns.barplot(x = 'reputation', y = df['reputation'].value_counts().values, data = df, ci = None)
Run Code Online (Sandbox Code Playgroud)

但两者都返回空白图.

知道我能做些什么才能得到这个吗?

python pandas seaborn

13
推荐指数
2
解决办法
2万
查看次数

替换Pandas Series给定条件中的值

这是一个微不足道的问题,我还没有找到一个明确的答案:

我有一个Series对象:

random = pd.Series(np.random.randint(10, 10)))
Run Code Online (Sandbox Code Playgroud)

我想用0替换大于1的所有值.我该怎么做?我已经尝试过Random.replace()但没有成功,我知道你可以在DataFrame中轻松完成这项工作,但是如何在Series对象中完成呢?

python pandas

10
推荐指数
1
解决办法
2万
查看次数

Pylint不在Spyder内工作

我在Windows计算机上安装了Anaconda,Spyder工作正常,但通过静态代码分析功能运行pylint会出错.Pylint是通过Conda安装的.

注意:Spyder中的错误不允许我直接复制和粘贴文本.使用图片到文本转换器来获取下面的代码,这样可能会有几个字符关闭...

No config file found, using default configuration Traceback (most recent call last):
File "C: \Users\ Username \AppData \Local \Continuum \Anaconda \Scripts\pylint-script.py", line 2, in <module> 
run_pylint() 
File "C: \Users\ USERNAME \AppData \Local \Continuum \Anaconda \lib\site-packages\pylint\_init_.py", line 23, in run_pylint 
Run(sys.argv[1:]) 
File "C: \Users\ USERNAME \AppData \Local \Continuum \Anaconda \lib\site-packages\pylint\lint.py", line 1313, in _init_ 
lintercheck(args) 
File "C: \Users\ USERNAME \AppData \Local \Continuum \Anaconda \lib\site-packages\pylint\lint.py", line 729, in check 
self._do_check(files_or_modules) 
File "C: \Users\ USERNAME \AppData \Local \Continuum \Anaconda \lib\site-packages\pylint\lint.py", line …
Run Code Online (Sandbox Code Playgroud)

python pylint spyder anaconda

7
推荐指数
1
解决办法
4224
查看次数

if __name__ =='__ main__'不工作ipython

我无法if __name == '__main__'在IPython,Spyder环境中使用这个技巧.我已经尝试了这个线程中给出的每个方法: 如果在IPython中__name__ =='__ main__'

这是我的超级简化模块

Module1.py

Class UnitTest():
    print 'Mod1 UnitTest!'

if __name__ == '__main__':
    UnitTest()
Run Code Online (Sandbox Code Playgroud)

Module2.py

import Module1

Class UnitTest():
    print 'Mod2 UnitTest!'

if __name__ == '__main__':
    UnitTest()
Run Code Online (Sandbox Code Playgroud)

所以我运行Module2.py,我总是看到两个Mod2 UnitTestMod1 UnitTest打印出来.这些是在IPython内核中执行的.我只Mod2 UnitTest想要显示消息.

知道怎么了?

python ipython spyder

7
推荐指数
1
解决办法
2807
查看次数

Pandas计算每个范围之间的值的数量

我想在某些自定义范围之间找到我的数据计数.

说我有一些数据:

import random

my_randoms = random.sample(xrange(100), 10)        
test = pd.DataFrame(my_randoms,columns = ["x"])
Run Code Online (Sandbox Code Playgroud)

如何生成显示不同范围之间的值数的数据框?例如,假设我想看看在0-19,20-39,40-59,60-79,80-100之间出现了多少个值.输出数据框将有一列包含这些范围,另一列包含计数.

我可以想到一些丑陋的方法,包括使用.apply获取一个新的列列表,说明它们之间的值(然后做一个groupby),但我怀疑pandas有一种更清洁的方式潜伏着.

python pandas

7
推荐指数
1
解决办法
4552
查看次数

如何在pandas中按对象分组滚动函数

我很难在数据帧中或者在groupby中解决回顾或翻转问题.

以下是我拥有的数据帧的简单示例:

              fruit    amount    
   20140101   apple     3
   20140102   apple     5
   20140102   orange    10
   20140104   banana    2
   20140104   apple     10
   20140104   orange    4
   20140105   orange    6
   20140105   grape     1
   …
   20141231   apple     3
   20141231   grape     2
Run Code Online (Sandbox Code Playgroud)

我需要计算每天前3天每种水果'量'的平均值,并创建以下数据框:

              fruit     average_in_last 3 days
   20140104   apple      4
   20140104   orange     10
   ...
Run Code Online (Sandbox Code Playgroud)

例如在20140104,前3天是20140101,20140102和20140103(注意数据框中的日期不连续且20140103不存在),苹果的平均数量是(3 + 5)/ 2 = 4和橙色是10/1 = 10,其余为0.

样本数据框非常简单,但实际数据框更复杂,更大.希望有人能对此有所了解,谢谢你提前!

python group-by apply dataframe pandas

6
推荐指数
3
解决办法
7810
查看次数

使用SQLAlchemy查询到Pandas DataFrame时重命名列

在将数据查询到pandas数据帧时,有没有办法保留SqlAlchemy属性名称?

这是我的数据库的简单映射.对于学校表,我将"学校名称"的"SchoolDistrict"重命名为更短的"地区".我从DBA中删除了几个层,因此在源代码中更改它们是不可行的.

class School(Base):
    __tablename__ = 'DimSchool'

    id = Column('SchoolKey', Integer, primary_key=True)
    name = Column('SchoolName', String)
    district = Column('SchoolDistrict', String)


class StudentScore(Base):
    __tablename__ = 'FactStudentScore'

    SchoolKey = Column('SchoolKey', Integer, ForeignKey('DimSchool.SchoolKey'), primary_key = True)
    PointsPossible = Column('PointsPossible', Integer)
    PointsReceived = Column('PointsReceived', Integer)

    school = relationship("School", backref='studentscore')
Run Code Online (Sandbox Code Playgroud)

所以当我查询类似的东西:

query = session.query(StudentScore, School).join(School)
df = pd.read_sql(query.statement, query.session.bind)
Run Code Online (Sandbox Code Playgroud)

我在返回的DataFrame df中得到了列的基础'SchoolDistrict'名称,而不是我的属性名称.

编辑:更令人讨厌的情况是表格中存在重复的列名称.例如:

class Teacher(Base):
    __tablename__ = 'DimTeacher'

    id = Column('TeacherKey', Integer, primary_key=True)
    fname = Column('FirstName', String)
    lname = Column('FirstName', String)

class Student(Base):
    __tablename__ = 'DimStudent' …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pandas

6
推荐指数
1
解决办法
2476
查看次数

将 sqlalchemy ORM 查询对象转换为 Pandas DataFrame 的 sql 查询

这个问题感觉非常简单,但我一直无法找到答案。

我有一个 ORM 查询对象,比如说

query_obj = session.query(Class1).join(Class2).filter(Class2.attr == 'state')
Run Code Online (Sandbox Code Playgroud)

我可以像这样将其读入数据帧:

testdf = pd.read_sql(query_obj.statement, query_obj.session.bind)
Run Code Online (Sandbox Code Playgroud)

但我真正想做的是使用传统的 SQL 查询而不是 ORM:

with engine.connect() as connection:
    # Execute the query against the database
    results = connection.execute(query_obj)
    # Fetch all the results of the query
    fetchall = results.fetchall()
    # Build a DataFrame with the results
    dataframe = pd.DataFrame(fetchall)
Run Code Online (Sandbox Code Playgroud)

其中 query 是传统的 SQL 字符串。现在,当我运行它时,我收到了“query_obj 不可执行”这样的错误。有人知道如何将 ORM 查询转换为传统查询吗?另外,在获取数据框后如何获取列?

为什么我这样做的上下文:我在我的数据库之上设置了一个 ORM 层,并使用它来将数据查询到Pandas DataFrame. 它有效,但它经常使我的记忆力最大化。我想通过一些字符串折叠来减少我的内存开销(此处概述的第 3 步:http : //www.mobify.com/blog/sqlalchemy-memory-magic/)。这需要(如果我在这里错了,请纠正我)不使用 read_sql 字符串,而是将查询的返回处理为原始元组。

sqlalchemy pandas

6
推荐指数
1
解决办法
3822
查看次数

Pandas DataFrames中的不同组合值

是否有一种简单的方法可以在数据框中提取不同的值组合?我已经将pd.Series.unique()用于单列,但是多列呢?

示例数据:

df = pd.DataFrame(data=[[1, 'a'], [2, 'a'], [3, 'b'], [3, 'b'], [1, 'b'], [1, 'b']], 
                  columns=['number', 'letter'])

Expected output:
(1, a)
(2, a)
(3, b)
(1, b)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要一个单独的具有不同值的元组的Series对象.

python pandas

5
推荐指数
2
解决办法
802
查看次数