小编Bri*_*gan的帖子

如何用百分比制作熊猫交叉表?

给定具有不同分类变量的数据帧,如何返回具有百分比而不是频率的交叉表?

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                   'B' : ['A', 'B', 'C'] * 8,
                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                   'D' : np.random.randn(24),
                   'E' : np.random.randn(24)})


pd.crosstab(df.A,df.B)


B       A    B    C
A               
one     4    4    4
three   2    2    2
two     2    2    2
Run Code Online (Sandbox Code Playgroud)

使用交叉表中的边距选项来计算行和列总数让我们足够接近,认为应该可以使用aggfunc或groupby,但是我的微脑无法想到它.

B       A     B    C
A               
one     .33  .33  .33
three   .33  .33  .33
two     .33  .33  .33
Run Code Online (Sandbox Code Playgroud)

python crosstab pandas

47
推荐指数
3
解决办法
5万
查看次数

将pandas时间序列从对象dtype重新索引到datetime dtype

我有一个时间序列,虽然被标准的YYYY-MM-DD字符串索引并且有效日期,但不被识别为DatetimeIndex.将它们强制转换为有效的DatetimeIndex似乎不够优雅,让我觉得我做错了什么.

我读入了(其他人的懒惰格式化)包含无效日期时间值的数据并删除了这些无效的观察结果.

In [1]: df = pd.read_csv('data.csv',index_col=0)
In [2]: print df['2008-02-27':'2008-03-02']
Out[2]: 
             count
2008-02-27  20
2008-02-28   0
2008-02-29  27
2008-02-30   0
2008-02-31   0
2008-03-01   0
2008-03-02  17

In [3]: def clean_timestamps(df):
    # remove invalid dates like '2008-02-30' and '2009-04-31'
    to_drop = list()
    for d in df.index:
        try:
            datetime.date(int(d[0:4]),int(d[5:7]),int(d[8:10]))
        except ValueError:
            to_drop.append(d)
    df2 = df.drop(to_drop,axis=0)
    return df2

In [4]: df2 = clean_timestamps(df)
In [5] :print df2['2008-02-27':'2008-03-02']
Out[5]:
             count
2008-02-27  20
2008-02-28   0
2008-02-29  27
2008-03-01   0
2008-03-02  17
Run Code Online (Sandbox Code Playgroud)

这个新索引仍然只被识别为'对象'dtype而不是DatetimeIndex.

In [6]: …
Run Code Online (Sandbox Code Playgroud)

python datetime python-2.7 pandas

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

从稀疏数据帧填充连续的pandas数据帧

我有一个由日期时间日期键入的字典名称date_dict,其值对应于观察的整数计数.我将其转换为稀疏系列/数据框,其中包含我想要加入或转换为具有连续日期的系列/数据框的审查观察.令人讨厌的列表理解是我解决这样一个事实:大熊猫显然不会自动将日期时间日期对象转换为适当的DateTime索引.

df1 = pd.DataFrame(data=date_dict.values(),
                   index=[datetime.datetime.combine(i, datetime.time()) 
                          for i in date_dict.keys()],
                   columns=['Name'])
df1 = df1.sort(axis=0)
Run Code Online (Sandbox Code Playgroud)

此示例有1258个观察值,DateTime索引从2003-06-24到2012-11-07运行.

df1.head()
             Name
Date
2003-06-24   2
2003-08-13   1
2003-08-19   2
2003-08-22   1
2003-08-24   5
Run Code Online (Sandbox Code Playgroud)

我可以创建一个带有连续DateTime索引的空数据框,但这会引入一个不需要的列,看起来很笨拙.我觉得我错过了一个更优雅的解决方案,涉及一个联接.

df2 = pd.DataFrame(data=None,columns=['Empty'],
                   index=pd.DateRange(min(date_dict.keys()),
                                      max(date_dict.keys())))
df3 = df1.join(df2,how='right')
df3.head()
            Name    Empty
2003-06-24   2   NaN
2003-06-25  NaN  NaN
2003-06-26  NaN  NaN
2003-06-27  NaN  NaN
2003-06-30  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

是否有更简单或更优雅的方法从稀疏数据帧中填充连续数据帧,以便存在(1)连续索引,(2)NaN为0,以及(3)中没有剩余空列数据帧?

            Name
2003-06-24   2
2003-06-25   0
2003-06-26   0
2003-06-27   0
2003-06-30   0
Run Code Online (Sandbox Code Playgroud)

python python-2.7 pandas

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

熊猫read_csv和UTF-16

我有一个用UTF-16编码的CSV文本文件(以便在其他人使用Excel时保留Unicode字符)但是当使用Pandas 0.9.0执行read_csv时,我得到了这个神秘的错误:

df = pd.read_csv('data.txt',encoding='utf-16',sep='\t',header=0)
df.head()

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-18-85da1383cd9e> in <module>()
----> 1 df = pd.read_csv('candidates-spanish.txt',encoding='utf-16',sep='\t',header=0)
  2 df.head()

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.pyc in read_csv(filepath_or_buffer, sep, dialect, header, index_col, names, skiprows, na_values, keep_default_na, thousands, comment, parse_dates, keep_date_col, dayfirst, date_parser, nrows, iterator, chunksize, skip_footer, converters, verbose, delimiter, encoding, squeeze, **kwds)
248         kdict['delimiter'] = sep
249 
--> 250     return _read(TextParser, filepath_or_buffer, kdict)
251 
252 @Appender(_read_table_doc)

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.pyc in _read(cls, filepath_or_buffer, kwds)
198         return parser
199 
--> 200     return parser.get_chunk()
201 
202 @Appender(_read_csv_doc) …
Run Code Online (Sandbox Code Playgroud)

csv utf-16 python-2.7 pandas

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

绘制日志分级网络度分布

我经常遇到并制作复杂网络的长尾度分布/直方图,如下图所示.它们使这些尾巴的重尾,嗯,非常沉重和拥挤许多观察:

经典的长尾度分布

然而,我读过的许多出版物都有更清晰的度数分布,这些分布在分布结束时没有这种结块,观察结果更均匀.

!经典的长尾度分布

你如何使用NetworkX和制作这样的图表matplotlib

python numpy matplotlib scientific-computing networkx

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

更改熊猫条形图中的 alpha 值以匹配变量

我有一个 DataFrame,其中包含几个统计模型的不同估计值和 p 值作为列。

df = pd.DataFrame({'m4_params':np.random.normal(size=3),
                   'm4_pvalues':np.random.random_sample(3),
                   'm5_params':np.random.normal(size=3),
                   'm5_pvalues':np.random.random_sample(3),
                   'm6_params':np.random.normal(size=3),
                   'm6_pvalues':np.random.random_sample(3)})
Run Code Online (Sandbox Code Playgroud)

我可以通过转置和绘制为barh

df[['m4_params','m5_params','m6_params']].T.plot(kind='barh')
Run Code Online (Sandbox Code Playgroud)

但是,我还想通过使用一个简单的函数(如alpha = 1 - pvalue.

目标是使显着性较高的条形更强,而显着性较弱的条形更透明。据我所知,alpha关键字只接受浮点数,这意味着我需要某种方式来访问图中每个条的属性。

alpha matplotlib bar-chart pandas

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

重塑Seaborn PairGrid上的子图

我非常喜欢Seaborn的PairGrid的功能.但是,我无法重塑这些次要情节令我满意.例如,下面的代码将返回一个包含1列和2行的数字,反映1 x变量和2 y变量.

import seaborn as sns
tips = sns.load_dataset('tips')
g = sns.PairGrid(tips,y_vars=['tip','total_bill'],x_vars=['size'], hue='sex')
g.map(sns.regplot,x_jitter=.125)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我最好将这个数字重新定位为2列1行.看起来这些子图存在于其中g.axes,但是如何将它们传递回一种plt.subplots(1,2)函数?

python matplotlib seaborn

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