我想看看如何在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) 当我将股票数据从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) 注意 - 正如下面建议的 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_test是select * 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) 我正在尝试在 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) 我正在尝试使用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) 我正试图找到一种方法来做一个累计总计来解释熊猫的关系.
让我们从赛道会议中获取假设数据,在那里我有人,赛,热和时间.
每个人的位置根据以下内容:
对于给定的种族/热量组合:
等等...
这将是相当简单的代码,但一方面..
如果两个人有相同的时间,他们都会得到相同的位置,然后下一次大于他们的时间将具有该值+ 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) 使用数据框和熊猫,我试图找出每个值占"分组依据"类别的总计百分比的百分比
所以,使用提示数据库,我想看到,对于每个性别/吸烟者,总账单占女性吸烟者/所有女性和女性非吸烟者/所有女性(男性同样的事情)的比例是多少
例如,
如果完整的数据集是:
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) 我想创建一个散点图,其中显示在 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)
这给了我这样的东西:
我根本不知道如何获取颜色(理想情况下,我喜欢使用调色板)或如何让图例显示姓氏和点
任何帮助将不胜感激..谢谢!
数据框中是否存在条件"移位"参数?
例如,
假设我拥有一辆二手车,我的数据如下
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']的值?
非常感谢你的帮助
pandas ×9
python ×9
dataframe ×3
excel ×2
matplotlib ×2
xlsxwriter ×2
aggregate ×1
aggregation ×1
mysql ×1
scatter-plot ×1
seaborn ×1