小编Dan*_*ty2的帖子

Matplotlib set_yticklabels 移位

鉴于以下代码:

import matplotlib.pyplot as plt
import numpy as np

x = [1.0, 1.1, 2.0, 5.7]
y = np.arange(len(x))
fsize=(2,2)
fig, ax = plt.subplots(1,1,figsize=fsize)
ax.set_yticklabels(['a','b','c','d'])
ax.barh(y,x,align='center',color='grey')
plt.show()
Run Code Online (Sandbox Code Playgroud)

为什么标签没有按预期显示('a' 没有出现并且所有内容都向下移动了 1 位)?

在此处输入图片说明

matplotlib bar-chart

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

Matplotlib 在每个条形上方绘制线条

我想在此图表中的每个条形上方绘制一条水平线。每个条形的 y 轴位置取决于变量“目标”。如果可能,我想使用 axhline 或 Line2D,因为我需要能够修改线条样式、颜色、长度和宽度。

import matplotlib.pyplot as plt
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline


# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')

#Here are the targets that I want to use 
#to plot horizontal lines above each bar...
targets = (6,6,8,6,9)

ind = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))

plt.bar(ind, performance, align='center')
plt.xticks(ind, people)

plt.show()
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python lines matplotlib

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

如何在Seaborn热图旁边添加列

给定下面的代码,它产生一个热图,我如何得到列"D"(总列)显示为热图右侧的一列没有颜色,只是对齐每个单元格的总值?我也试图将标签移到顶部.我不介意左边的标签是水平的,因为我的实际数据不会出现这种情况.

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
%matplotlib inline
df = pd.DataFrame(
      {'A' : ['A', 'A', 'B', 'B','C', 'C', 'D', 'D'],
       'B' : ['A', 'B', 'A', 'B','A', 'B', 'A', 'B'],
       'C' : [2, 4, 5, 2, 0, 3, 9, 1],
       'D' : [6, 6, 7, 7, 3, 3, 10, 10]})

df=df.pivot('A','B','C')
fig, ax = plt.subplots(1, 1, figsize =(4,6))

sns.heatmap(df, annot=True, linewidths=0, cbar=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是期望的结果:

期望的结果

提前致谢!

python-3.x seaborn

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

如果缺少,Python将元素添加到列表中的列表中

给定以下列表列表:

a = [[2,3],[1,2,3],[1]]
Run Code Online (Sandbox Code Playgroud)

我需要中的每个列表都具有相同数量的元素。首先,我需要获得a中所有列表的最长长度。然后,我需要确保所有列表至少都这么长。如果不是,我想在末尾添加零(0),直到正确为止。理想的结果是:

b = [[2,3,0],[1,2,3],[1,0,0]]
Run Code Online (Sandbox Code Playgroud)

提前致谢!

PS,我还需要将此应用到这样的Pandas Data Frame:

import pandas as pd
b = [[2,3,0],[1,2,3],[1,0,0]]
f=pd.DataFrame({'column':b})
Run Code Online (Sandbox Code Playgroud)

python numpy list pandas

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

Pandas DataFrame 到 Excel:索引的垂直对齐

给定以下数据框: import pandas as pd

d=pd.DataFrame({'a':['a','a','b','b'],
               'b':['a','b','c','d'],
               'c':[1,2,3,4]})
d=d.groupby(['a','b']).sum()
d
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想以与索引相同的对齐方式导出它(看看最左边的列如何垂直居中?)。问题在于,将其导出到 Excel 时,左列与每个单元格的顶部对齐:

writer = pd.ExcelWriter('pandas_out.xlsx', engine='xlsxwriter')
workbook  = writer.book
f=workbook.add_format({'align': 'vcenter'})
d.to_excel(writer, sheet_name='Sheet1')
writer.save()
Run Code Online (Sandbox Code Playgroud)

...产生...

在此处输入图片说明

有没有办法通过 XLSX Writer 或其他库垂直居中 A 列?

提前致谢!

python pandas xlsxwriter

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

用列名替换非空值

给出以下数据框:

import pandas as pd
d = pd.DataFrame({'a':[1,2,3],'b':[np.nan,5,6]})
d
    a   b
0   1   NaN
1   2   5.0
2   3   6.0
Run Code Online (Sandbox Code Playgroud)

我想用列名替换所有非空值.

期望的结果:

    a   b
0   a   NaN
1   a   b
2   a   b
Run Code Online (Sandbox Code Playgroud)

实际上,我有很多专栏.

提前致谢!

更新以从根回答: 要对列的子集执行此操作:

d.loc[:,d.columns[3:]] = np.where(d.loc[:,d.columns[3:]].notnull(), d.loc[:,d.columns[3:]].columns, d.loc[:,d.columns[3:]])
Run Code Online (Sandbox Code Playgroud)

python replace dataframe pandas

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

Pandas DataFrame 一次为多个列为空

鉴于以下情况:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[np.nan,1,2],'b':[np.nan,np.nan,4]})

     a    b
0  NaN  NaN
1  1.0  NaN
2  2.0  4.0
Run Code Online (Sandbox Code Playgroud)

如何返回列“a”和“b”均为空的行,而不必pd.isnull对每一列使用?

期望的结果:

     a    b
0  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

我知道这是可行的(但这不是我想要的方式):

df.loc[(pd.isnull(df['a']) & (pd.isnull(df['b'])]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

df.loc[pd.isnull(df[['a', 'b']])]
Run Code Online (Sandbox Code Playgroud)

...但出现以下错误:

ValueError: Cannot index with multidimensional key
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python isnull pandas

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

GeoPandas,MatPlotLib绘制自定义颜色

给定这里的形状文件:我想用自定义颜色绘制下面指定的一组县;韦恩县和华盛顿州为“蓝色”,其他县为“灰色”。

import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline

shpfile=<Path to unzipped .shp file referenced and linked above>
c=gpd.read_file(shpfile)
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])]
c.plot()
Run Code Online (Sandbox Code Playgroud)

我希望先将颜色分配为数据框中的一列,然后在以某种方式绘制时调用它们。这可能吗?

更新

我已经尝试过像散点图那样传递列表并在循环中进行绘制,但是它的工作方式似乎并不相同,因为它只是绘制单独的县地图,而不是在一个图中绘制所有的县地图。

这是我尝试过的:

color=['b','b','b','b','b','c','c','c','c','c']
for i in range(10):
    c.iloc[i:i+1].plot(c='white',linewidth=.5,color=color[i])
Run Code Online (Sandbox Code Playgroud)

提前致谢!

matplotlib python-3.x geopandas

4
推荐指数
1
解决办法
1878
查看次数

Seaborn FacetGrid PointPlot标签数据点

给定以下内容:

import seaborn as sns
attend = sns.load_dataset("attention")
sns.set_style("whitegrid", {'axes.grid' : False,'axes.edgecolor':'none'})
g = sns.FacetGrid(attend, col="subject", col_wrap=5,
size=1.5, ylim=(0, 10))
ax = g.map(sns.pointplot, "solutions", "score", scale=.7)
Run Code Online (Sandbox Code Playgroud)

我想在每行上标记单个数据点(用值标签代替点)。在我仅通过MatPlotLib创建的另一个绘图中,这是这样完成的:

for i, text in enumerate(ind):
    a.annotate(str(y[i])[:-2], xy=(ind[i], y[i]),fontsize=6, color=c, 
                bbox=dict(pad=.9,alpha=1, fc='white',color='none'),va='center', ha='center',weight='bold')
Run Code Online (Sandbox Code Playgroud)

但是,由于没有定义ind,所以我不确定这将如何工作。

python seaborn facet-grid

4
推荐指数
1
解决办法
1845
查看次数

Pandas 获取 Cell 中每个元组的第一个元素

给定以下数据框:

import pandas as pd
df=pd.DataFrame({'A':['a','b','c'],
                 'B':[[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]]]})
df

    A               B
0   a   [[1, 2], [3, 4], [5, 6]]
1   b   [[1, 2], [3, 4], [5, 6]]
2   c   [[1, 2], [3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列 ('C'),其中包含列 B 的元组的每个元素中的第一个值,如下所示:

    A               B                 C
0   a   [[1, 2], [3, 4], [5, 6]]   [1,3,5]
1   b   [[1, 2], [3, 4], [5, 6]]   [1,3,5]
2   c   [[1, 2], [3, 4], [5, 6]]   [1,3,5]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过:

df['C']=df['B'][0]
Run Code Online (Sandbox Code Playgroud)

...但这只会返回第一个元组 ([1, 2])。

提前致谢!

tuples python-3.x pandas

3
推荐指数
2
解决办法
6291
查看次数