小编Mar*_*ius的帖子

如何制作好的可重复的熊猫示例

花了相当多的时间观察SO上的标签,我得到的印象是pandas问题不太可能包含可重现的数据.这是值得的R社会一直要鼓励不错,并感谢像导游这样,新人能得到放在一起,这些例子一些帮助.能够阅读这些指南并返回可重现数据的人通常会更好地获得他们问题的答案.

我们如何为pandas问题创建良好的可重复示例?简单的数据帧可以放在一起,例如:

import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'], 
                   'income': [40000, 50000, 42000]})
Run Code Online (Sandbox Code Playgroud)

但是许多示例数据集需要更复杂的结构,例如:

  • datetime 指数或数据
  • 多个分类变量(是否等价于R的expand.grid()函数,它会产生某些给定变量的所有可能组合?)
  • MultiIndex或Panel数据

对于dput()难以使用几行代码进行模拟的数据集,是否有与R相当的R ,它允许您生成可复制粘贴的代码以重新生成数据结构?

python pandas

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

pandas:当单元格内容是列表时,为列表中的每个元素创建一行

我有一个数据框,其中一些单元格包含多个值的列表.我不想在单元格中存储多个值,而是扩展数据框,以便列表中的每个项目都有自己的行(在所有其他列中具有相同的值).所以,如果我有:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'trial_num': [1, 2, 3, 1, 2, 3],
     'subject': [1, 1, 1, 2, 2, 2],
     'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
    }
)

df
Out[10]: 
                 samples  subject  trial_num
0    [0.57, -0.83, 1.44]        1          1
1    [-0.01, 1.13, 0.36]        1          2
2   [1.18, -1.46, -0.94]        1          3
3  [-0.08, -4.22, -2.05]        2          1
4     [0.72, 0.79, 0.53]        2          2
5    [0.4, -0.32, -0.13]        2          3
Run Code Online (Sandbox Code Playgroud)

如何转换为长格式,例如:

   subject  trial_num  sample  sample_num …
Run Code Online (Sandbox Code Playgroud)

python list pandas

133
推荐指数
7
解决办法
6万
查看次数

检查dataframe列是否为Categorical

我似乎无法在v0.15 +中使用Pandas改进的Categoricals进行简单的dtype检查.基本上我只想要类似的东西is_categorical(column) -> True/False.

import pandas as pd
import numpy as np
import random

df = pd.DataFrame({
    'x': np.linspace(0, 50, 6),
    'y': np.linspace(0, 20, 6),
    'cat_column': random.sample('abcdef', 6)
})
df['cat_column'] = pd.Categorical(df2['cat_column'])
Run Code Online (Sandbox Code Playgroud)

我们可以看到,dtype分类列是"类别":

df.cat_column.dtype
Out[20]: category
Run Code Online (Sandbox Code Playgroud)

通常我们可以通过比较dtype的名称来进行dtype检查:

df.x.dtype == 'float64'
Out[21]: True
Run Code Online (Sandbox Code Playgroud)

但是,当尝试检查x列是否属于分类时,这似乎不起作用:

df.x.dtype == 'category'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-94d2608815c4> in <module>()
----> 1 df.x.dtype == 'category'

TypeError: data type "category" not understood
Run Code Online (Sandbox Code Playgroud)

有没有办法在pandas v0.15 +中进行这些类型的检查?

python pandas

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

排序算法保持相等的值分开

心理学实验通常要求你伪随机化试验顺序,以便试验显然是随机的,但你不会连续得到太多相似的试验(这可能发生在纯粹的随机排序中).

假设每个试验的视觉显示都有颜色和大小:

display_list = []
colours = {0: 'red', 1: 'blue', 2: 'green', 3: 'yellow'}
sizes = [1] * 20 + [2] * 20 + [3] * 20 + [4] * 20 + [5] * 20 + [6] * 20
for i in range(120):
    display_list.append({'colour': colours[i % 4], 'size': sizes[i]})
print(display_list)
Run Code Online (Sandbox Code Playgroud)

我们可以使用此函数查看具有相同值的连续试验的最大数量:

def consecutive_properties(seq, field):
    longest_run = 0
    prev_value = None
    current_run = 0
    for d in seq:
        if d[field] == prev_value:
            current_run += 1
        else:
            current_run = 1
        if …
Run Code Online (Sandbox Code Playgroud)

python sorting algorithm

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

pandas:填充组内的缺失值

我有一些来自实验的数据,并且在每个试验中都有一些单独的值,被我们包围NA,我想填写整个试验:

df = pd.DataFrame({'trial': [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3], 
    'cs_name': [np.nan, 'A1', np.nan, np.nan, np.nan, np.nan, 'B2', 
                np.nan, 'A1', np.nan, np.nan, np.nan]})
Out[177]: 
   cs_name  trial
0      NaN      1
1       A1      1
2      NaN      1
3      NaN      1
4      NaN      2
5      NaN      2
6       B2      2
7      NaN      2
8       A1      3
9      NaN      3
10     NaN      3
11     NaN      3
Run Code Online (Sandbox Code Playgroud)

我能同时使用,填补了整个试验中这些值bfill()ffill(),但我不知道是否有更好的方式来实现这一目标.

df['cs_name'] = df.groupby('trial')['cs_name'].ffill()
df['cs_name'] = …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

确保在运行.Rprofile之前加载所有默认包

我有几个RStudio项目,我已经设置了自动化任务,如评分多项选择测试.执行任务所需的功能只保存在文本文件中,并确保它们对我或其他用户可用,我一直在使用.Rprofilesource("MyFunctions.R")启动时运行的文件.如果.Rprofile文件位于RStudio项目的基本目录中,则在打开项目时会自动运行该文件

但是,我遇到了偶然的错误,其中基本R包提供的函数在脚本获取之前未加载,函数如,read.csv或者installed.packages,例如:

Error in eval(expr, envir, enclos) : 
  could not find function "installed.packages"
Run Code Online (Sandbox Code Playgroud)

有没有办法等待默认包在source()运行之前加载,而不是library()为所有无法加载的默认包添加显式调用?

r rstudio

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

ggplot2:绘制具有一组相似颜色的离散因子

我正在尝试在绘制它们时提出一种表示数据集中每个因子的一致方法.因此,例如,每当我绘制涉及词性的内容时,我可以将"词性"的级别用不同的蓝色阴影表示:

eg.dat <- data.frame(rt=c(530, 540, 555), 
                     part.of.speech=c("Verb", "Noun", "Both")
                     )

ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
  geom_bar(stat="identity", colour="black") +
  scale_fill_manual(values=c("cyan", "blue", "darkblue")) 
Run Code Online (Sandbox Code Playgroud)

手动指定颜色

然而,为每个因素提供像这样的花哨的颜色名称是困难的,所以我一直在寻找更自动的解决方案.一个相当hackish的解决方法是使用alpha:

ggplot(eg.dat, aes(part.of.speech, rt, alpha=part.of.speech)) +
  geom_bar(stat="identity", colour="black", fill="blue") +
  scale_alpha_discrete(range=c(0.4, 1))
Run Code Online (Sandbox Code Playgroud)

使用alpha

但我一直想知道是否有更简单的方法可以选择这样的短程类似颜色.该scale_colour_gradient型功能ggplot2不独立因素,如这些工作,它似乎并不特别容易得到自定义颜色出来rainbowheat.colors.理想的功能是: shades(n, central_colour="blue")返回n颜色值.有关实现这一目标的最佳方法的任何建议吗?

plot r ggplot2

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

Sympy:手动使用平等

我目前正在做数学课程,我的目标是理解概念和过程,而不是尽快处理问题集.在求解方程时,我希望能够自己捅它们而不是让它们为我解决.

假设我们有一个非常简单的等式z + 1 = 4- 如果我自己解决这个问题,我显然会从双方减去1,但我无法弄清楚是否sympy提供了一种简单的方法来做到这一点.目前,我能想出的最佳解决方案是:

from sympy import *
z = symbols('z')
eq1 = Eq(z + 1, 4)
Eq(eq1.lhs - 1, eq1.rhs - 1)
# Output:
# z == 3
Run Code Online (Sandbox Code Playgroud)

哪个更明显的表达式eq1 - 1只会从左侧减去.我怎样才能像这样一步一步地使用sympy来平等地工作(即没有让solve()方法给我答案)?任何指向实际上可能具有同情性的操作的指针都将受到赞赏.

python sympy

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

加入数字向量的数字

我对Matlab很新,虽然不是编程.我正在尝试散列一个字符串,并获取一个值作为该字符串的唯一ID.我在FileExchange中使用这个DataHash函数,它将散列作为整数向量返回.到目前为止,我发现将其转换为单个数值的最佳解决方案是:

hash_opts.Format = 'uint8';
hash_vector = DataHash(string, hash_opts);
hash_string = num2str(hash_vector);
% Use a simple regex to remove all whitespace from the string,
% takes it from '1 2 3 4' to '1234'
hash_string = regexprep(hash_string, '[\s]', '');
hashcode = str2double(hash_string);
Run Code Online (Sandbox Code Playgroud)

可重现的示例,不依赖于DataHash:

hash_vector = [1, 23, 4, 567];
hash_string = num2str(hash_vector);
% Use a simple regex to remove all whitespace from the string,
% takes it from '1 2 3 4' to '1234'
hash_string = regexprep(hash_string, …
Run Code Online (Sandbox Code Playgroud)

matlab

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

如何使用if语句分割数据?

我在R中有一个涉及学生和GPA的数据集

Student       GPA
Jim           3.00
Tom           3.29
Ana           3.99
Run Code Online (Sandbox Code Playgroud)

等等.

我想要一个将它们放入垃圾箱的列.例如

Student       GPASplit
Jim           3.0-3.5
Tom           3.0-3.5
Ana           3.5-4.0
Run Code Online (Sandbox Code Playgroud)

因为当我尝试获取GPA的统计数据时,所有垃圾箱都会根据实际GPA进行分离.例如,我试图找到有多少学生高于3.5,GPA在3.0-3.5之间的百分比,等等.但是我得到了实际GPA的百分比,当你有4000个数据点都有不同的GPA时,很难弄清楚有多少GPA高于3.5等等?这有意义吗?对不起,如果没有.

r

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

标签 统计

python ×6

pandas ×4

r ×3

algorithm ×1

ggplot2 ×1

list ×1

matlab ×1

plot ×1

rstudio ×1

sorting ×1

sympy ×1