小编Reu*_*eut的帖子

如果一行中的一个单元格为空,则更改数据框中的特定值

我在熊猫中有以下数据框:

>>>name   food  beverage  age
0  Ruth   Burger Cola      23
1 Dina    Pasta  water     19
2 Joel    Tuna   water     28
3 Daniel  null   soda      30
4 Tomas   null   cola     10
Run Code Online (Sandbox Code Playgroud)

我想提出条件,如果食物列中的值为空,则年龄和饮料将变为“ ”(也为空),

我为此编写了此代码:

if df[(df['food'].isna())]:
  df['beverage']=' '
  df['age']=' '
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误:

ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我玩过 ([ 但没有帮助,我做错了什么?

python null if-statement pandas

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

Plotly:如何使用 px.line 更改线条样式?

我的数据框看起来与此类似:

>>>Hour    Level   value   
0  7        H      1.435
1  7        M      3.124
2  7        L      5.578
3  8        H      0.435
4  8        M      2.124
5  8        L      4.578
Run Code Online (Sandbox Code Playgroud)

我想在绘图中创建折线图,该折线图将根据“级别”列具有不同的线条样式。

现在我有默认线条样式的折线图:

import plotly.graph_objects as go
fig = px.line(group, x="Hour", y="value",color='level', title='Graph',category_orders={'level':['H','M','L']}
             ,color_discrete_map={'H':'royalblue','M':'orange','L':'firebrick'})

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

在此输入图像描述

我想控制每个级别的线条样式。直到知道我看到做到这一点的唯一方法是为每个“级别”添加,但使用 add_trace 如下:

# Create and style traces
fig.add_trace(go.Scatter(x="Hour", y="value", name='H',
                         line=dict(dash='dash')))
fig.add_trace(go.Scatter(x="Hour", y="value", name = 'M',
                         line=dict(dash='dot')))
fig.show()
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误:

ValueError:为 scatter 的 'x' 属性收到的类型 'builtins.str' 的值无效 收到的值:'Hour'

The 'x' property is an array that may be specified …
Run Code Online (Sandbox Code Playgroud)

python linechart linestyle plotly plotly-python

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

接近 0.05 的舍入从结果中删除一位

我有两列带有数字数据的熊猫表(dtype flaot64)。我已经将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05,第二列四舍五入但错过了第二位数字。

这是一个假的例子,它可以工作并显示流程:

table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
                   'B': [0.22426,0.15779,0.30346]})

#function for round to near 0.5:
def custom_round(x, base=5):
    return base * round(float(x)/base)

table['A'] = table['A'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
table['B'] = table['B'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
table

>>>

A   B
0   0.60    0.20
1   0.55    0.15
2   0.20    0.30
Run Code Online (Sandbox Code Playgroud)

但在我的桌子上,我最终得到了:

在此处输入图片说明

当我在没有函数的情况下运行脚本接近 0.5 时,我仍然得到两位数:

table['B'] = table['B'].round(2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的问题是为什么会这样?以及如何修复它以便将两列四舍五入为 0.05 并显示两个数字?

编辑:有人问我如何将它应用到我的真实桌子上,所以:

df['A'] = df['A'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
df['B']= df['B'].round(2).apply(lambda x: custom_round(x, base=.05))
Run Code Online (Sandbox Code Playgroud)

python rounding pandas

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

使用仅对角线数据的表中的值创建一行

我在熊猫中有下表-

>>>index1   index2   index3   index4   index5   index6   index7
0   sig      null    null     null     null     null     null
1   null      sig     null     null     null     null     null
2   null      null    sig      null     null     null     null
3   null      null    null     sig      null     null     null
4   null      null    null     null     no sig   null     null
5   null      null    null     null     null     no sig   null
6   null      null    null     null     null     null     sig
Run Code Online (Sandbox Code Playgroud)

我想摆脱减少空值并将数据放在一行中,如下所示:

>>>index1   index2   index3   index4   index5   index6   index7
0   sig      sig     sig      sig      no …
Run Code Online (Sandbox Code Playgroud)

python null if-statement append pandas

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

熊猫在列中找到最接近的值

我有下表:

   year   pop1     pop2
0   0    100000    100000
1   1    999000    850000
2   2    860000    700000
3   3    770000    650000
Run Code Online (Sandbox Code Playgroud)

我想为每个 pop (pop1 ,pop2) 找到 pop 最接近给定数字的年份,例如,pop 最接近 830000 的年份。

有没有办法根据给定的值在列内找到最接近的值?

我看过这篇文章(如何在 Pandas 系列中找到与输入数字最接近的值? _ 但似乎这里的结果是上下,我最终只能得到一个数字。

*我没有代码示例,因为我没有找到任何用于获取最近的参数

python pandas

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

如果特定列不包含 pandas 中的数字,则删除行

我有以下熊猫数据框:

>>>ID      WKT
0 4272   Point(4.21189  3.1298)
1 2345   Point(None None)
2 1254   Point (3.8945 4.6712)
...
Run Code Online (Sandbox Code Playgroud)

我想删除“WKT”列中不包含任何数字的行,例如第 1 行。我看到有 isnumeric() 等函数,但我不想检查单元格中的所有字符是否都是数字,但前提是它包含数字或 nit,如果不包含则将其删除。

我想要的输出应该是这样的:

>>>ID      WKT
0 4272   Point(4.21189  3.1298)
2 1254   Point (3.8945 4.6712)
...
Run Code Online (Sandbox Code Playgroud)

python string digits pandas

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

如果单元格值高于 0.05,seaborn 不会在热图中给出颜色

我已经创建了热图,我想设置一个条件,如果单元格值高于 0.05,它将获得 cmap 中没有的特定颜色。现在我所做的是定义 vmin 和 vmax,但问题是 vmax 仍然得到 0.5 或 0.6 值,并且我不能确定条件是否真的保持不变。

green=sns.light_palette("seagreen",reverse=True,as_cmap=True)
sns.set(rc={'figure.figsize':(18.7,3.27)})
sns.heatmap(fhtmp,square=True,cmap=green,linewidths=.5,vmin=0, vmax=0.05)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如你在这里看到的,我真的不知道紫色的值是否等于 0.05 还是大于 0.05,我希望能够区分,因此如果值大于 0.05,单元格将具有不同的颜色,例如白色或灰色。

编辑:我设法使用一种面具,但绿色有一种色调,而面具有多种颜色。

sns.set(rc={'figure.figsize':(18.7,3.27)})
ax = sns.heatmap(fhtmp, cmap=green, center=0.8, square=True, 
                 linewidth=.5, vmin=0, vmax=0.05)
ax = sns.heatmap(fhtmp, mask=fhtmp < 0.053, cmap='Blues', square=True, annot=False, vmin=0.053, vmax=0.53, cbar=False, ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 这就是我得到的,这仍然不是想要的结果

python heatmap colorbar seaborn

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

在错误的 x 轴上的热图绘制线顶部的辅助 y 轴上创建线图

我有两张表,一张是从热图生成的,一张是需要在辅助 y 轴上绘制折线图的。创建热图没有问题:

green = sns.light_palette("seagreen", reverse=True, as_cmap=True)
green.set_over('tomato')
sns.set(rc={'figure.figsize': (20.7, 10.27)})
sns.set(font_scale=2)
ax=sns.heatmap(df, square=True, linewidths=.5, annot=False, fmt='.3f',
               cmap=green, vmin=0, vmax=0.05)
    
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当我尝试在热图顶部绘制线条时,问题就开始了。该线应具有相同的 x 轴值,并且这些值应位于辅助 y 轴中。df 行如下所示:

>>>day     value
0  14       315.7
1  15       312.3
2  16       305.9
3  17       115.2
4  18       163.2
5  19       305.78
...
Run Code Online (Sandbox Code Playgroud)

我尝试将其绘制在顶部,如下所述

green = sns.light_palette("seagreen", reverse=True, as_cmap=True)
green.set_over('tomato')
sns.set(rc={'figure.figsize': (20.7, 10.27)})
sns.set(font_scale=2)
ax=sns.heatmap(df, square=True, linewidths=.5, annot=False, fmt='.3f',
              cmap=green, vmin=0, vmax=0.05)

ax2=plt.twinx()
ax2.plot(df_line['day'], df_line['value'],color="blue")
line = ax2.lines[0]
line.set_xdata(line.get_xdata() + 0.5)


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

但后来我把线“移”到了左侧,我在 …

python matplotlib heatmap line-plot seaborn

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