我是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) 我刚开始使用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)
输出是这样的:

我即将构建一个需要构建XML文档并将其发布到Web服务的项目,我希望用Python来实现,作为扩展我的技能的一种方法.
不幸的是,虽然我在.NET中相当了解XML模型,但我不确定Python中XML模型的优缺点.
有没有经验在Python中进行XML处理?你会建议我从哪里开始?我将构建的XML文件非常简单.
Pandas DataFrame包含名为"date"包含非唯一datetime值的列.我可以使用以下方法对此帧中的行进行分组:
data.groupby(data['date'])
Run Code Online (Sandbox Code Playgroud)
但是,这会按datetime值拆分数据.我想按照"日期"列中存储的年份对这些数据进行分组.此页面显示如何在时间戳用作索引的情况下按年分组,在我的情况下不是这样.
我如何实现这种分组?
我正在使用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的.我想传递str的converters参数read_csv(带converters={'One': str})),但它仍然读取空单元格作为NaN的.
我知道读书,和fillna后,我可以填补值,但真的没有办法告诉大家,在一个特定的CSV列空单元格应该被解读为空字符串,而不是NaN的熊猫吗?
我正在使用Pandas包,它创建了一个DataFrame对象,它基本上是一个带标签的矩阵.通常我的列具有长字符串字段,或者具有许多列的数据帧,因此简单的打印命令不能很好地工作.我写了一些文本输出函数,但它们并不好.
我真正喜欢的是一个简单的GUI,它允许我与数据帧/矩阵/表进行交互.就像你在SQL工具中找到的一样.基本上是一个窗口,它有一个只读电子表格,如查看数据.我可以通过长桌等扩展列,页面向上和向下翻页等.
我怀疑这样的事情存在,但我必须用错误的条款谷歌搜索.如果它是特定的熊猫会很棒,但我猜我可以使用任何矩阵接受工具.(顺便说一句 - 我在Windows上.)
有什么指针吗?
或者,相反,如果有人知道这个空间并且知道这可能不存在,那么是否有一个简单的GUI框架/小部件可以用来推动我自己的任何建议?(但由于我的需求有限,我不愿意学习一个大的GUI框架并为这一部分做一堆编码.)
我知道熊猫支持辅助Y轴,但我很好奇,如果有人知道一种方法将三维Y轴放在图上......目前我用numpy + pyplot实现了这个...但是对于大数据集它很慢.
这是在同一图表上绘制不同单位的不同测量值,以便于比较(例如相对湿度/温度/和电导率)
所以真的很好奇,如果有人知道如果pandas没有太多的工作,这是否可行.
[编辑]我怀疑有没有办法做到这一点(没有太多开销)但是我希望被证明是错误的,这可能是matplotlib的限制......
我正进入(状态
TypeError:不可用类型:'slice'
执行以下代码时,在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) 我一直在探索如何优化我的代码并运行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) 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,一列用于第一个结果,一列用于第二列.这是可能的还是我必须为两次计算做两次运行,然后将它们合并在一起?