小编piR*_*red的帖子

Python 3 - Encode/Decode vs Bytes/Str

我是python3的新手,来自python2,我对unicode基础知识有点困惑.我已经阅读了一些好的帖子,这使得它更加清晰,但是我看到python 3上有2个方法,它们处理编码和解码,我不确定使用哪个方法.

所以python 3中的想法是,每个字符串都是unicode,可以编码并以字节存储,或者再次解码回unicode字符串.

但是有两种方法可以做到:
u'something'.encode('utf-8')生成b'bytes',但同样如此bytes(u'something', 'utf-8').
并且b'bytes'.decode('utf-8')似乎做同样的事情str(b'', 'utf-8').

现在我的问题是,为什么有两种方法似乎做同样的事情,并且要么比另一种更好(为什么?)我一直试图在谷歌找到答案,但没有运气.

>>> original = '27?????????'
>>> type(original)
<class 'str'>
>>> encoded = original.encode('utf-8')
>>> print(encoded)
b'27\xe5\xb2\x81\xe5\xb0\x91\xe5\xa6\x87\xe7\x94\x9f\xe5\xad\xa9\xe5\xad\x90\xe5\x90\x8e\xe5\x8f\x98\xe8\x80\x81'
>>> type(encoded)
<class 'bytes'>
>>> encoded2 = bytes(original, 'utf-8')
>>> print(encoded2)
b'27\xe5\xb2\x81\xe5\xb0\x91\xe5\xa6\x87\xe7\x94\x9f\xe5\xad\xa9\xe5\xad\x90\xe5\x90\x8e\xe5\x8f\x98\xe8\x80\x81'
>>> type(encoded2)
<class 'bytes'>
>>> print(encoded+encoded2)
b'27\xe5\xb2\x81\xe5\xb0\x91\xe5\xa6\x87\xe7\x94\x9f\xe5\xad\xa9\xe5\xad\x90\xe5\x90\x8e\xe5\x8f\x98\xe8\x80\x8127\xe5\xb2\x81\xe5\xb0\x91\xe5\xa6\x87\xe7\x94\x9f\xe5\xad\xa9\xe5\xad\x90\xe5\x90\x8e\xe5\x8f\x98\xe8\x80\x81'
>>> decoded = encoded.decode('utf-8')
>>> print(decoded)
27?????????
>>> decoded2 = str(encoded2, 'utf-8')
>>> print(decoded2)
27?????????
>>> type(decoded)
<class 'str'>
>>> type(decoded2)
<class 'str'>
>>> print(str(b'27\xe5\xb2\x81\xe5\xb0\x91\xe5\xa6\x87\xe7\x94\x9f\xe5\xad\xa9\xe5\xad\x90\xe5\x90\x8e\xe5\x8f\x98\xe8\x80\x81', 'utf-8'))
27????????? …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

74
推荐指数
3
解决办法
14万
查看次数

如何给pandas/matplotlib条形图自定义颜色

我刚开始使用pandas/matplotlib替代Excel来生成堆积条形图.我遇到了一个问题

(1)默认色图中只有5种颜色,所以如果我有超过5种颜色,则重复颜色.如何指定更多颜色?理想情况下,具有开始颜色和结束颜色的渐变,以及在两者之间动态生成n种颜色的方法?

(2)颜色在视觉上不是很悦目.如何指定n种颜色的自定义组?或者,渐变也可以.

以下两个例子说明了上述两点:

  4 from matplotlib import pyplot
  5 from pandas import *
  6 import random
  7 
  8 x = [{i:random.randint(1,5)} for i in range(10)]
  9 df = DataFrame(x)
 10 
 11 df.plot(kind='bar', stacked=True)
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

在此输入图像描述

python matplotlib pandas

72
推荐指数
3
解决办法
8万
查看次数

Python中的XML处理

我即将构建一个需要构建XML文档并将其发布到Web服务的项目,我希望用Python来实现,作为扩展我的技能的一种方法.

不幸的是,虽然我在.NET中相当了解XML模型,但我不确定Python中XML模型的优缺点.

有没有经验在Python中进行XML处理?你会建议我从哪里开始?我将构建的XML文件非常简单.

python xml

68
推荐指数
9
解决办法
7892
查看次数

如何在非唯一列中按日期将pandas DataFrame条目分组

Pandas DataFrame包含名为"date"包含非唯一datetime值的列.我可以使用以下方法对此帧中的行进行分组:

data.groupby(data['date'])
Run Code Online (Sandbox Code Playgroud)

但是,这会按datetime值拆分数据.我想按照"日期"列中存储的年份对这些数据进行分组.此页面显示如何在时间戳用作索引的情况下按年分组,在我的情况下不是这样.

我如何实现这种分组?

python pandas

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

获取pandas.read_csv将空值读取为空字符串而不是nan

我正在使用pandas库读取一些CSV数据.在我的数据中,某些列包含字符串.字符串"nan"是可能的值,空字符串也是如此.我设法让大熊猫把"nan"作为一个字符串来读,但我无法弄清楚如何让它不读取空值作为NaN.这是示例数据和输出

One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
    One  Two  Three
0    a    1    one
1    b    2    two
2  NaN    3  three
3    d    4    nan
4    e    5   five
5  nan    6    NaN
6    g    7  seven
Run Code Online (Sandbox Code Playgroud)

它正确地写着"男"为字符串"南",但仍读取空单元格作为NaN的.我想传递strconverters参数read_csv(带converters={'One': str})),但它仍然读取空单元格作为NaN的.

我知道读书,和fillna后,我可以填补值,但真的没有办法告诉大家,在一个特定的CSV列空单元格应该被解读为空字符串,而不是NaN的熊猫吗?

python csv pandas

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

Python/Pandas - 用于查看DataFrame或Matrix的GUI

我正在使用Pandas包,它创建了一个DataFrame对象,它基本上是一个带标签的矩阵.通常我的列具有长字符串字段,或者具有许多列的数据帧,因此简单的打印命令不能很好地工作.我写了一些文本输出函数,但它们并不好.

我真正喜欢的是一个简单的GUI,它允许我与数据帧/矩阵/表进行交互.就像你在SQL工具中找到的一样.基本上是一个窗口,它有一个只读电子表格,如查看数据.我可以通过长桌等扩展列,页面向上和向下翻页等.

我怀疑这样的事情存在,但我必须用错误的条款谷歌搜索.如果它是特定的熊猫会很棒,但我猜我可以使用任何矩阵接受工具.(顺便说一句 - 我在Windows上.)

有什么指针吗?

或者,相反,如果有人知道这个空间并且知道这可能不存在,那么是否有一个简单的GUI框架/小部件可以用来推动我自己的任何建议?(但由于我的需求有限,我不愿意学习一个大的GUI框架并为这一部分做一堆编码.)

python user-interface dataframe pandas

57
推荐指数
9
解决办法
6万
查看次数

PANDAS绘制多个Y轴

我知道熊猫支持辅助Y轴,但我很好奇,如果有人知道一种方法将三维Y轴放在图上......目前我用numpy + pyplot实现了这个...但是对于大数据集它很慢.

这是在同一图表上绘制不同单位的不同测量值,以便于比较(例如相对湿度/温度/和电导率)

所以真的很好奇,如果有人知道如果pandas没有太多的工作,这是否可行.

[编辑]我怀疑有没有办法做到这一点(没有太多开销)但是我希望被证明是错误的,这可能是matplotlib的限制......

python pandas

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

Python"TypeError:unhashable type:'slice'"用于编码分类数据

我正进入(状态

TypeError:不可用类型:'sl​​ice'

执行以下代码时,在Python中编码分类数据.有人可以帮忙吗?

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('50_Startups.csv')
y=dataset.iloc[:, 4]
X=dataset.iloc[:, 0:4]

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib pandas

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

pandas .at与.loc

我一直在探索如何优化我的代码并运行pandas .at方法.根据文档

基于标签的快速标量访问器

与loc类似,at提供基于标签的标量查找.您也可以使用这些索引器进行设置.

所以我跑了一些样品:

建立

import pandas as pd
import numpy as np
from string import letters, lowercase, uppercase

lt = list(letters)
lc = list(lowercase)
uc = list(uppercase)

def gdf(rows, cols, seed=None):
    """rows and cols are what you'd pass
    to pd.MultiIndex.from_product()"""
    gmi = pd.MultiIndex.from_product
    df = pd.DataFrame(index=gmi(rows), columns=gmi(cols))
    np.random.seed(seed)
    df.iloc[:, :] = np.random.rand(*df.shape)
    return df

seed = [3, 1415]
df = gdf([lc, uc], [lc, uc], seed)

print df.head().T.head().T
Run Code Online (Sandbox Code Playgroud)

df 好像:

            a                                        
            A         B         C         D         E …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

从pandas返回多个值适用于DataFrame

DataFrame根据这个例子,我正在使用Pandas 进行逐行t检验:

import numpy
import pandas

df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4), 
                      columns=["a", "b", "c", "d"])

df = df.dropna()
Run Code Online (Sandbox Code Playgroud)

现在,假设我将"a"和"b"作为一个组,而"c"和"d"作为另一个组,我正在逐行执行t检验.这对于pandas来说相当简单,使用applyaxis = 1.但是,如果我的函数没有聚合,我可以返回相同形状的DataFrame,如果聚合则返回Series.

通常我只输出p值(所以,聚合),但我想基于其他计算生成一个额外的值(换句话说,返回两个值).我当然可以做两次运行,首先聚合p值,然后进行其他工作,但我想知道是否有更有效的方法可以做到这一点,因为数据相当大.

作为计算的一个例子,一个hypotethical函数将是:

from scipy.stats import ttest_ind

def t_test_and_mean(series, first, second):
    first_group = series[first]
    second_group = series[second]
    _, pvalue = ttest_ind(first_group, second_group)

    mean_ratio = second_group.mean() / first_group.mean()

    return (pvalue, mean_ratio)
Run Code Online (Sandbox Code Playgroud)

然后调用

df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)
Run Code Online (Sandbox Code Playgroud)

当然,在这种情况下,它返回一个以两个元组为值的系列.

相反,ny预期输出将是具有两列的DataFrame,一列用于第一个结果,一列用于第二列.这是可能的还是我必须为两次计算做两次运行,然后将它们合并在一起?

python pandas

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

标签 统计

python ×10

pandas ×8

dataframe ×2

matplotlib ×2

csv ×1

numpy ×1

python-3.x ×1

user-interface ×1

xml ×1