我在熊猫中有以下数据框:
>>>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()。
我玩过 ([ 但没有帮助,我做错了什么?
我的数据框看起来与此类似:
>>>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'
Run Code Online (Sandbox Code Playgroud)The 'x' property is an array that may be specified …
我有两列带有数字数据的熊猫表(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) 我在熊猫中有下表-
>>>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) 我有下表:
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 系列中找到与输入数字最接近的值? _ 但似乎这里的结果是上下,我最终只能得到一个数字。
*我没有代码示例,因为我没有找到任何用于获取最近的参数
我有以下熊猫数据框:
>>>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) 我已经创建了热图,我想设置一个条件,如果单元格值高于 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)
我有两张表,一张是从热图生成的,一张是需要在辅助 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)
但后来我把线“移”到了左侧,我在 …