小编Ant*_*ano的帖子

线图中的中心 x 轴标签

我正在用两条线构建一个线图,一条用于高温,另一条用于低温。x 轴基于日期时间格式(2014-01-01 等)一整年的天数。但是,我更改了几个月(一月、二月、三月等)的标签,而不是数据。问题是第一个标签“Jan”在原点。我想要的是将所有标签向右移动,使它们在刻度之间居中

fig, ax = plt.subplots()

plt.plot(x, y1)
plt.plot(x, y2)

# Change x-axis from %y-%m-%d format to %m:
monthsFmt = mdates.DateFormatter('%m')
plt.gca().xaxis.set_major_formatter(monthsFmt)

# Replace numeric x-axis labels (1,2,3, ..., 12) for abbreviations of months ('Jan', 'Feb', 'Mar', etc.):
labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
ax.set_xticklabels(labels)

# CODE GOES HERE TO CENTER X-AXIS LABELS...

# Render plot:
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找结果

在此处输入图片说明

python matplotlib

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

ipywidgets:使用交互时避免闪烁

我制作了一个图形,其中包含分别基于随机正态分布、伽玛分布、指数分布和均匀分布的直方图的四个子图。我使用 matplotlib 和 Jupyter Notebook 制作的。它是通过 ipywidgets lib 生成的交互式图形。特别是,有四个滑动条控制每个直方图上的样本大小并相应地更新它们。然而,当更新直方图时,它会令人烦恼地闪烁。有什么办法可以避免这种情况吗?谢谢。

现在要在 jupyter 笔记本上运行的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib notebook
from ipywidgets import *

n = 1000
x1 = np.random.normal(-2.5, 1, n)
x2 = np.random.gamma(2, 1.5, n)
x3 = np.random.exponential(2, n)+7
x4 = np.random.uniform(14,20, n)
x = [x1, x2, x3, x4]

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(10,7))
axs = [ax1,ax2,ax3,ax4]

titles = ['x1\nNormal', 'x2\nGamma', 'x3\nExponential', 'x4\nUniform']
subplots_axes = [[-7,2,0,250], [0,4.5,0,250], [7,25,0,250], …
Run Code Online (Sandbox Code Playgroud)

python matplotlib jupyter-notebook ipywidgets

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

找到连续两个季度的GDP下降,并以连续两个季度的GDP增长结束

以下是df的数据,其中包含从1947q1到2016q2的美国季度GDP(以2009年美元计,以十亿美元计):

df = pd.DataFrame(data = [1934.5, 1932.3, 1930.3, 1960.7, 1989.5, 2021.9, 2033.2, 2035.3, 2007.5, 2000.8, 2022.8, 2004.7, 2084.6, 2147.6, 2230.4, 2273.4, 2304.5, 2344.5, 2392.8, 2398.1, 2423.5, 2428.5, 2446.1, 2526.4, 2573.4, 2593.5, 2578.9, 2539.8, 2528.0, 2530.7, 2559.4, 2609.3, 2683.8, 2727.5, 2764.1, 2780.8, 2770.0, 2792.9, 2790.6, 2836.2, 2854.5, 2848.2, 2875.9, 2846.4, 2772.7, 2790.9, 2855.5, 2922.3, 2976.6, 3049.0, 3043.1, 3055.1, 3123.2, 3111.3, 3119.1, 3081.3, 3102.3, 3159.9, 3212.6, 3277.7, 3336.8, 3372.7, 3404.8, 3418.0, 3456.1, 3501.1, 3569.5, 3595.0, 3672.7, 3716.4, 3766.9, 3780.2, 3873.5, 3926.4, 4006.2, …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

4
推荐指数
2
解决办法
2001
查看次数

Pandas 相当于 SQL case when 语句创建新变量

我有这个 df:

data = np.array([[np.nan, 0], [2, 0], [np.nan, 1]])
df = pd.DataFrame(data=data, columns = ['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

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

我的目标是创建第三列“c”,当“a”列等于 NaN 且“b”列等于 0 时,该列的值为 1。否则“c”将为 0。简单的 SQL case 语句是:

(CASE WHEN a IS NULL AND b = 0 THEN 1 ELSE 0 END) AS C
Run Code Online (Sandbox Code Playgroud)

所述期望的输出是这样的:

     a    b   c
    -----------
0   NaN  0.0  1
1   2.0  0.0  0
2   NaN  1.0  0
Run Code Online (Sandbox Code Playgroud)

我的(错误)尝试:

df['c'] = …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

根据ngrams的长度逐行子集数据

我有一个数据框,有许多术语(不同大小的ngrams,最多五格)和它们各自的频率:

df = data.frame(term = c("a", "a a", "a a card", "a a card base", "a a card base ne",
                         "a a divorce", "a a divorce lawyer", "be", "be the", "be the one"), 
                freq = c(131, 13, 3, 2, 1, 1, 1, 72, 17, 5))
Run Code Online (Sandbox Code Playgroud)

哪个给我们:

                 term freq
1                   a  131
2                 a a   13
3            a a card    3
4       a a card base    2
5    a a card base ne    1
6         a a divorce    1
7  a …
Run Code Online (Sandbox Code Playgroud)

split r dataframe

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

从字符串中删除最后四位数字 – 将 Zip+4 转换为邮政编码

下面这段代码...

data = np.array([['','state','zip_code','collection_status'],
                ['42394','CA','92637-2854', 'NaN'],
                ['58955','IL','60654', 'NaN'],
                ['108365','MI','48021-1319', 'NaN'],
                ['109116','MI','48228', 'NaN'],
                ['110833','IL','60008-4227', 'NaN']])

print(pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:]))
Run Code Online (Sandbox Code Playgroud)

...给出以下数据框:

         state            zip_code    collection_status
42394       CA          92637-2854                  NaN
58955       IL               60654                  NaN
108365      MI          48021-1319                  NaN
109116      MI               48228                  NaN
110833      IL          60008-4227                  NaN
Run Code Online (Sandbox Code Playgroud)

目标是将“zip_code”列同质化为 5 位格式——即,当特定数据点有 9 位而不是 5 位时,我想从 zip_code 中删除最后四位数字。顺便说一句,zip_code 的类型是“对象”类型.

任何的想法?

python pandas

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

Matplotlib:将x轴刻度标签向左移动一个位置

我正在制作条形图,我想将x轴刻度标签向左移动一个位置.这是情节的代码:

matplotlib.rcParams.update(matplotlib.rcParamsDefault)
plt.style.use(['seaborn-white', 'bmh'])

fig1, ax = plt.subplots()

palette = ['#2a5495', '#07a64c', '#e979ad', '#d88432', '#2a5495',
               '#b7040e', '#82c5db', '#b9c09b', '#cd065d', '#4b117f']

x = np.array(df.index)
y = np.array(df.loc[:, 2015])

width = 1.0
lefts = [x * width for x, _ in enumerate(y)]
ax.bar(left = lefts, height = y, width = width, tick_label = x, color = palette, label = ranked_univs)

ax.axis(ymin = 0, ymax = 200, xmin = -0.5, xmax = 9.5)
ax.tick_params(axis='x', which='major', labelsize=8)
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=45)

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

这是条形图:

在此输入图像描述

任何线索?

python matplotlib

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

使用SQLite从两列中获取唯一的对称对

我一直在关注Stack上的类似问题,但其中任何一个似乎对我都有帮助.我有下表叫"喜欢":

 ID1    ID2
1689    1709
1709    1689
1782    1709
1911    1247
1247    1468
1641    1468
1316    1304
1501    1934
1934    1501
1025    1101
Run Code Online (Sandbox Code Playgroud)

我想获得两列ID1和ID2之间的唯一对.那是:

 ID1    ID2
1689    1709
1501    1934
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢.

sql sqlite

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

Python 中的多重处理:并行化 for 循环以填充 Numpy 数组

我一直在阅读类似这样的帖子,但其中任何一个似乎都适合我的情况。我正在尝试使用 Python 中的多重处理并行化以下玩具示例,以在 for 循环内填充 Numpy 数组:

import numpy as np
from multiprocessing import Pool
import time


def func1(x, y=1):
    return x**2 + y

def func2(n, parallel=False):
    my_array = np.zeros((n))
    
    # Parallelized version:
    if parallel:
        pool = Pool(processes=6)
        for idx, val in enumerate(range(1, n+1)):
            result = pool.apply_async(func1, [val])
            my_array[idx] = result.get()
        pool.close()

    # Not parallelized version:
    else:
        for i in range(1, n+1):
            my_array[i-1] = func1(i)

    return my_array

def main():
    start = time.time()
    my_array = func2(60000)
    end = time.time() …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numpy python-3.x python-multiprocessing

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

使用正则表达式更改列名称

我有五个名为organoleptic的列.1.感官.2.,感官.等等在称为"df"的数据框中.我想将它们重命名为organoleptic1,organoleptic2,organoleptic3等.也就是说,我想删除数字周围的两个点.我使用名称功能做到了:

names(df)[names(df) == "organoleptic.1."] <- "organoleptic1"
names(df)[names(df) == "organoleptic.2."] <- "organoleptic2"
names(df)[names(df) == "organoleptic.3."] <- "organoleptic3"
names(df)[names(df) == "organoleptic.4."] <- "organoleptic4"
names(df)[names(df) == "organoleptic.5."] <- "organoleptic5"
Run Code Online (Sandbox Code Playgroud)

但是,我想只需键入一行代码即可.是否可以使用正则表达式或任何其他技巧来做到这一点?很多thx!

r

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