小编Stu*_*nce的帖子

Seaborn Barplot - 显示价值观

我想看看如何在Seaborn中做两件事,使用条形图来显示数据框中的值,但不在图表中

1)我想在绘制另一个字段时显示数据框中一个字段的值.例如,下面,我正在绘制'tip',但我想将'total_bill'的值置于每个柱的中心位置(即星期五上方325.88,星期六上方1778.40等)

2)有没有办法缩放条形的颜色,最小值'total_bill'具有最亮的颜色(在本例中为星期五),最高值'total_bill'具有最暗颜色.显然,当我进行缩放时,我会坚持使用一种颜色(即蓝色).

谢谢!我确信这很容易,但我很想念它..

虽然我看到其他人认为这是另一个问题(或两个)的重复,但我错过了如何使用图中没有的值作为标签或阴影的基础的部分.怎么说,用total_bill作为基础.对不起,我根据这些答案无法弄明白.

从以下代码开始,

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-    book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
g=sns.barplot(x='day',y='tip',data=groupedvalues)
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

在此输入图像描述

临时解决方案:

for index, row in groupedvalues.iterrows():
    g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

着色上,使用下面的示例,我尝试了以下内容:

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()

pal = sns.color_palette("Greens_d", len(data))
rank = groupedvalues.argsort().argsort() 
g=sns.barplot(x='day',y='tip',data=groupedvalues)

for index, row in groupedvalues.iterrows():
    g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

AttributeError:'DataFrame'对象没有属性'argsort'

所以我尝试了修改:

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',') …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn

18
推荐指数
5
解决办法
5万
查看次数

Pandas和Rolling_Mean with Offset(平均每日体积计算)

当我将股票数据从Yahoo拉入数据框时,我希望能够计算5天的平均交易量,不包括当前日期.

有没有办法使用具有偏移的滚动平均值?例如,5天的平均值不包括当前日期,并且基于之前的5天.

当我运行以下代码时

r = DataReader("BBRY", "yahoo", '2015-01-01','2015-01-31')

r['ADV']=pd.rolling_mean(r['Volume'], window=5)
Run Code Online (Sandbox Code Playgroud)

它返回5天的音量,包括当前日期,因此当您查看下面的内容时,1/8的平均音量为1/2,1/5,1/6,1/7和1/8.我希望1/9成为返回平均音量的第一个日期,它包含1/2,1/5,1/6,1/7和1/8的数据.

    Date   Open    High     Low   Close    Volume  Adj Close  Symbol           ADV 

1/2/2015  11.01   11.11   10.79   10.82   9733200      10.82    BBRY           NaN
1/5/2015  10.60   10.77   10.37   10.76  12318100      10.76    BBRY           NaN
1/6/2015  10.80   10.85   10.44   10.62  10176400      10.62    BBRY           NaN
1/7/2015  10.65   10.80   10.48   10.67  10277400      10.67    BBRY           NaN
1/8/2015  10.75   10.78   10.57   10.63   6868300      10.63    BBRY  9,874,680.00 
1/9/2015  10.59   10.65   10.28   10.38   7745600      10.38    BBRY  9,477,160.00 
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

9
推荐指数
2
解决办法
5367
查看次数

MySQL 存储过程、Pandas 和“执行多条语句时使用 multi=True”

注意 - 正如下面建议的 MaxU,该问题特定于 mysql.connector,如果您使用 pymysql,则不会发生。希望这可以为其他人省去一些麻烦

使用 Python、Pandas 和 mySQL 根本无法获得返回结果的存储过程,更不用说进入数据框了。

我不断收到关于多个查询的错误,但我运行的存储过程是非常简单的参数驱动查询。

我使用什么存储过程并不重要,它总是相同的结果

其实下面的测试程序(sp_test)就是下面的查询——

select * from users;
Run Code Online (Sandbox Code Playgroud)

如果我运行相同的语句

df=pd.read_sql("select * from users", cnx,index_col=None, coerce_float=True)
Run Code Online (Sandbox Code Playgroud)

代替

df=pd.read_sql("call sp_test()", cnx,index_col=None, coerce_float=True)
Run Code Online (Sandbox Code Playgroud)

它工作正常,即使sp_testselect * from users

为什么我不断收到 multi=true 错误消息,我该如何解决问题并获取存储过程的结果?我不明白一个简单的 select 语句将如何返回多个结果集。

如果有其他方法可以做到这一点,很高兴尝试一下。

以下是我正在使用的简单代码

import pandas as pd
from pandas.io.data import DataReader
from pandas import DataFrame
import mysql.connector

cnx = mysql.connector.connect(user='jeff', password='password', database='testdatabase', host='xx.xxx.xxx.xx')
df=pd.read_sql("call sp_test()", cnx,index_col=None, coerce_float=True)
Run Code Online (Sandbox Code Playgroud)

当我到达 pd.read_sql 时,我收到以下错误消息

InterfaceError                            Traceback (most recent call last)
C:\Users\User\AppData\Local\Continuum\Anaconda3\lib\site-    packages\mysql\connector\cursor.py in …
Run Code Online (Sandbox Code Playgroud)

python mysql stored-procedures pandas

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

XLSX Writer Python-以数字为中点的 3 色标

我正在尝试在 XLSX 编写器中使用 3 色标进行条件格式设置,中间值为 0 中点值。我希望所有负值从红色(最低数字)缩放到黄色(当值为零时),所有正数从黄色(零时)缩放到绿色(最高)。

当我尝试以下操作时,缩放比例变得一团糟。

在 Excel 中看起来像以下内容:

在此处输入图片说明

我可以弄清楚如何在 XLSX 作家中做一个 3 色阶,但似乎没有一个选项(我可以看到)中点是一个数字:

worksheet.conditional_format('G2:G83', {'type': '3_color_scale',
                                     'min_color': "red",
                                     'mid_color': "yellow",
                                     'max_color': "green"})
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用一种标准将其分解,其中一种格式应用于高于零的值和低于零的值

worksheet.conditional_format('G2:G83', {'type': '2_color_scale',
                                    'criteria': '<',
                                    'value': 0,
                                    'min_color': "red",
                                    'max_color': "yellow"})


worksheet.conditional_format('G2:G83', {'type': '2_color_scale',
                                    'criteria': '>',
                                    'value': 0,
                                     'min_color': "yellow",
                                     'max_color': "green"})
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用-如果有人有任何想法..请告诉我..将不胜感激。

完整的示例代码:

import xlsxwriter

workbook = xlsxwriter.Workbook('conditional_format.xlsx')
worksheet1 = workbook.add_worksheet()


# Add a format. Light red fill with dark red text.
format1 = workbook.add_format({'bg_color': '#FFC7CE',
                           'font_color': '#9C0006'})

# Add a format. Green …
Run Code Online (Sandbox Code Playgroud)

python excel data-visualization pandas xlsxwriter

6
推荐指数
2
解决办法
4664
查看次数

xlsxwriter没有将格式应用于数据帧的标题行 - Python Pandas

我正在尝试使用xlsxwriter获取数据框并使用该数据框创建电子表格

我试图对标题行进行一些格式化,但似乎在该行上工作的唯一格式是行高.完全相同的格式选项适用于数据框的其他行.

请看下面的代码..

红色(和高度)应用于除标题行(第2行)以外的所有行 - 红色应用于第0行和第3行,但只有高度应用于第2行

任何帮助将非常感激

import numpy as np
import pandas as pd
from pandas.io.data import DataReader
from pandas import DataFrame
from IPython import display

import xlsxwriter

WorkBookName="test.xlsx"



df3=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')

writer = pd.ExcelWriter(WorkBookName, engine='xlsxwriter')
df3.to_excel(writer, sheet_name="sheet",index=False,startrow=2)


workbook  = writer.book
worksheet = writer.sheets["sheet"]

worksheet.write(0,0,"text string")
worksheet.write(0,1,"text string")
worksheet.write(0,2,"text string")
worksheet.write(0,3,"text string")


color_format = workbook.add_format({'color': 'red'})
worksheet.set_row(0,50,color_format)
worksheet.set_row(2,50,color_format)
worksheet.set_row(3,50,color_format)    


writer.save()

display.FileLink(WorkBookName)
Run Code Online (Sandbox Code Playgroud)

python excel pandas xlsxwriter

5
推荐指数
1
解决办法
2240
查看次数

具有关系的熊猫价值累积排名

我正试图找到一种方法来做一个累计总计来解释熊猫的关系.

让我们从赛道会议中获取假设数据,在那里我有人,赛,热和时间.

每个人的位置根据以下内容:

对于给定的种族/热量组合:

  • 排在最前面的人是第一位的
  • 排名第二的人排在第二位

等等...

这将是相当简单的代码,但一方面..

如果两个人有相同的时间,他们都会得到相同的位置,然后下一次大于他们的时间将具有该值+ 1作为位置.

在下表中,对于100码短跑,加热1,RUNNER1首先完成,RUNNER2/RUNNER3 获得第二, RUNNER3 获得第三(下一次在RUNNER2/RUNNER3之后)

所以基本上,逻辑如下:

如果race <> race.shift()或heat <> heat.shift(),则place = 1

如果race = race.shift()和heat = heat.shift()和time> time.shift那么place = place.shift()+ 1

如果race = race.shift()和heat = heat.shift()和time> time.shift那么place = place.shift()

令我困惑的部分是如何处理这种关系.否则我可以做点什么

df['Place']=np.where(
              (df['race']==df['race'].shift())
              &
              (df['heat']==df['heat'].shift()),
              df['Place'].shift()+1,
              1)
Run Code Online (Sandbox Code Playgroud)

谢谢!

示例数据如下:

Person,Race,Heat,Time
RUNNER1,100 Yard Dash,1,9.87
RUNNER2,100 Yard Dash,1,9.92
RUNNER3,100 Yard Dash,1,9.92
RUNNER4,100 Yard Dash,1,9.96
RUNNER5,100 Yard Dash,1,9.97
RUNNER6,100 Yard Dash,1,10.01
RUNNER7,100 Yard Dash,2,9.88
RUNNER8,100 Yard Dash,2,9.93 …
Run Code Online (Sandbox Code Playgroud)

python dataframe cumulative-sum pandas

3
推荐指数
1
解决办法
826
查看次数

熊猫分组 - 分组总数不起作用的百分比值

使用数据框和熊猫,我试图找出每个值占"分组依据"类别的总计百分比的百分比

所以,使用提示数据库,我想看到,对于每个性别/吸烟者,总账单占女性吸烟者/所有女性和女性非吸烟者/所有女性(男性同样的事情)的比例是多少

例如,

如果完整的数据集是:

Sex, Smoker, Day, Time, Size, Total Bill
Female,No,Sun,Dinner,2, 20
Female,No,Mon,Dinner,2, 40
Female,No,Wed,Dinner,1, 10
Female,Yes,Wed,Dinner,1, 15
Run Code Online (Sandbox Code Playgroud)

第一行的值将是(20 + 40 + 10)/(20 + 40 + 10 + 15),因为那些是非吸烟女性的其他3个值

所以输出应该是这样的

Female No 0.823529412
Female Yes 0.176470588
Run Code Online (Sandbox Code Playgroud)

但是,我似乎遇到了一些麻烦

当我这样做时,

import pandas as pd
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-   book/master/ch08/tips.csv", sep=',')
df.groupby(['sex', 'smoker'])[['total_bill']].apply(lambda x: x / x.sum()).head()
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

    total_bill
0   0.017378
1   0.005386
2   0.010944
3   0.012335
4   0.025151
Run Code Online (Sandbox Code Playgroud)

它似乎忽略了组,只是为每个项目计算它

我正在寻找更像的东西

df.groupby(['sex', 'smoker'])[['total_bill']].sum()
Run Code Online (Sandbox Code Playgroud)

哪个会回归

        total_bill
sex smoker  
Female  No  977.68
        Yes 593.27
Male    No  1919.75 …
Run Code Online (Sandbox Code Playgroud)

python aggregate aggregation dataframe pandas

3
推荐指数
1
解决办法
3868
查看次数

Pandas 散点图使用数据框字段派生颜色和图例

我想创建一个散点图,其中显示在 pandas 中相互映射的两列,第三列用于大小,然后是基于标签的点的颜色(在下面的情况下,last_name)。

然后我想要一个图例,显示颜色的点,然后显示姓氏值

每个姓氏应该与不同的颜色相关联,并且图例显示,例如,绿点和米勒,红点和雅各布森等。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
    'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
    'female': [0, 1, 1, 0, 1],
    'age': [42, 52, 36, 24, 73],
    'preTestScore': [4, 24, 31, 2, 3],
    'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'female', 'preTestScore', 'postTestScore'])

plt.scatter(df.preTestScore, df.postTestScore, s=df.age, label=df.last_name)
plt.legend(loc='upper left', prop={'size':6}, bbox_to_anchor=(1,1),ncol=1)
Run Code Online (Sandbox Code Playgroud)

这给了我这样的东西:

在此输入图像描述

我根本不知道如何获取颜色(理想情况下,我喜欢使用调色板)或如何让图例显示姓氏和点

任何帮助将不胜感激..谢谢!

注意 …

python visualization matplotlib scatter-plot pandas

3
推荐指数
1
解决办法
2683
查看次数

Pandas和Python数据帧以及条件转换函数

数据框中是否存在条件"移位"参数?

例如,

假设我拥有一辆二手车,我的数据如下

SaleDate    Car
12/1/2016   Wrangler
12/2/2016   Camry
12/3/2016   Wrangler
12/7/2016   Prius
12/10/2016  Prius
12/12/2016  Wrangler
Run Code Online (Sandbox Code Playgroud)

我想从这个列表中找到两件事 -

1)对于每次销售,汽车售出的最后一天是什么时候?这在Pandas中很简单,只是一个简单的转变如下

df['PriorSaleDate'] = df['SaleDate'].shift()
Run Code Online (Sandbox Code Playgroud)

2)对于每次销售,同一类型汽车的销售日期是什么时候?因此,例如,12/3处的牧马人销售将指向两行返回到12/1(最后一次第3行中的"汽车"值等于前一行中的"汽车"值).

对于12/12年出售的牧马人,我希望价值12/3

是否有一个条件移位参数,允许我在那里得到行df ['Car']等于该行中df ['Car']的值?

非常感谢你的帮助

python data-analysis pandas

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