我正在尝试将pandas数据帧可视化为热图,并且我尝试使用所有绘图函数时出现了奇怪的错误(我尝试使用DataFrame对象和DataFrame.values数组,并且没有任何更改).我不明白它可能是什么原因.这是数据帧:
1 2 3 4 5 6 7 8 9 10 11 12 \
1 0 1163 986 1105 1315 1472 844 560 1033 867 610 703
2 1163 0 1774 803 1091 899 704 806 891 648 1082 1199
3 986 1774 0 679 880 798 1268 931 560 1128 774 481
4 1105 803 679 0 742 654 887 765 1113 1079 605 928
5 1315 1091 880 742 0 924 580 658 1073 1008 719 …Run Code Online (Sandbox Code Playgroud) 我正在努力学习大熊猫,但我对以下内容感到困惑.我想替换NaNs是一个具有行平均值的数据帧.因此,类似的东西df.fillna(df.mean(axis=1))应该工作,但由于某种原因,它失败了.我错过了什么,我做错了什么?是因为它没有实施; 看到这里的链接
import pandas as pd
import numpy as np
?
pd.__version__
Out[44]:
'0.15.2'
In [45]:
df = pd.DataFrame()
df['c1'] = [1, 2, 3]
df['c2'] = [4, 5, 6]
df['c3'] = [7, np.nan, 9]
df
Out[45]:
c1 c2 c3
0 1 4 7
1 2 5 NaN
2 3 6 9
In [46]:
df.fillna(df.mean(axis=1))
Out[46]:
c1 c2 c3
0 1 4 7
1 2 5 NaN
2 3 6 9
Run Code Online (Sandbox Code Playgroud)
但是这样的事情看起来很好
df.fillna(df.mean(axis=0))
Out[47]:
c1 c2 c3
0 …Run Code Online (Sandbox Code Playgroud) 如果我有这样的列表:
results=[-14.82381293, -0.29423447, -13.56067979, -1.6288903, -0.31632439,
0.53459687, -1.34069996, -1.61042692, -4.03220519, -0.24332097]
Run Code Online (Sandbox Code Playgroud)
我想在Python中计算这个列表的方差,这是与平均值的平方差的平均值.
我怎么能这样做?访问列表中的元素进行计算让我感到困惑,因为我得到了方差.
我想使用lmfit模块将函数拟合到可变数量的数据集,包括一些共享和一些单独的参数.
以下是生成高斯数据并分别拟合每个数据集的示例:
import numpy as np
import matplotlib.pyplot as plt
from lmfit import minimize, Parameters, report_fit
def func_gauss(params, x, data=[]):
A = params['A'].value
mu = params['mu'].value
sigma = params['sigma'].value
model = A*np.exp(-(x-mu)**2/(2.*sigma**2))
if data == []:
return model
return data-model
x = np.linspace( -1, 2, 100 )
data = []
for i in np.arange(5):
params = Parameters()
params.add( 'A' , value=np.random.rand() )
params.add( 'mu' , value=np.random.rand()+0.1 )
params.add( 'sigma', value=0.2+np.random.rand()*0.1 )
data.append(func_gauss(params,x))
plt.figure()
for y in data:
fit_params …Run Code Online (Sandbox Code Playgroud) 我有一个很大的csr_matrix,我对前十个值及其每一行的指数感兴趣.但我没有找到一种操纵矩阵的好方法.
这是我目前的解决方案,主要思想是逐行处理它们:
row = csr_matrix.getrow(row_number).toarray()[0].ravel()
top_ten_indicies = row.argsort()[-10:]
top_ten_values = row[row.argsort()[-10:]]
Run Code Online (Sandbox Code Playgroud)
通过这样做,csr_matrix没有充分利用其优点.它更像是一个强力解决方案.
我有一个字符串列表.我想为每个字符串分配一个唯一的编号(确切的数字并不重要),并按顺序使用这些编号创建一个相同长度的列表.以下是我最好的尝试,但我不满意有两个原因:
它假设相同的值彼此相邻
我必须用a开始列表0,否则输出将是不正确的
我的代码:
names = ['ll', 'll', 'll', 'hl', 'hl', 'hl', 'LL', 'LL', 'LL', 'HL', 'HL', 'HL']
numbers = [0]
num = 0
for item in range(len(names)):
if item == len(names) - 1:
break
elif names[item] == names[item+1]:
numbers.append(num)
else:
num = num + 1
numbers.append(num)
print(numbers)
Run Code Online (Sandbox Code Playgroud)
我想使代码更通用,因此它将使用未知列表.有任何想法吗?
我正在scipy.optimize.curve_fit()以迭代的方式使用.
我的问题是,当它无法适应参数时,整个程序(以及迭代)停止,这就是它给出的错误:
RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.
我明白为什么它无法适应.我的问题是,有什么办法可以在Python 3.2.2中编写程序来忽略这种情况而只是继续吗?
我想知道如何删除列中包含负值的所有索引.我正在使用熊猫DataFrames.
格式:
Myid - valuecol1 - valuecol2 - valuecol3 -... valuecol30
所以我DataFrame被称为data
我知道如何为1列做到这一点:
data2 = data.index[data['valuecol1'] > 0]
data3 = data.ix[data3]
Run Code Online (Sandbox Code Playgroud)
所以我只得到ids在哪里valuecol1 > 0,我怎么能做某种and陈述?
valuecol1 && valuecol2 && valuecol3 && ... && valuecol30 > 0 ?
我有这样一个数组myA:
array([ 7, 4, 5, 8, 3, 10])
Run Code Online (Sandbox Code Playgroud)
如果我想将大于值的所有值替换val为0,我可以简单地执行:
myA[myA > val] = 0
Run Code Online (Sandbox Code Playgroud)
这给了我想要的输出(for val = 5):
array([0, 4, 5, 0, 3, 0])
Run Code Online (Sandbox Code Playgroud)
但是,我的目标是替换不仅仅是n这个数组中大于值的第一个元素val.
所以,如果n = 2我想要的结果看起来像这样(10是第三个元素,因此不应该被替换):
array([ 0, 4, 5, 0, 3, 10])
Run Code Online (Sandbox Code Playgroud)
一个简单的实现是:
import numpy as np
myA = np.array([7, 4, 5, 8, 3, 10])
n = 2
val = 5
# track the number of replacements
repl = 0
for ind, vali in …Run Code Online (Sandbox Code Playgroud) import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd'))
ax = df.plot(kind="bar", subplots=True, layout=(2, 2), sharey=True, sharex=True, rot=0, fontsize=20)
Run Code Online (Sandbox Code Playgroud)
现在如何将x和y标签添加到结果图中?这里解释了一个单一的情节.因此,如果我想为特定的子图添加标签,我可以这样做:
ax[1][0].set_xlabel('my_general_xlabel')
ax[0][0].set_ylabel('my_general_ylabel')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给了:
如何添加标签以使它们居中并且不仅仅引用一行/列?
python ×10
pandas ×4
list ×2
matplotlib ×2
scipy ×2
arrays ×1
dataframe ×1
lmfit ×1
missing-data ×1
numpy ×1
parameters ×1
performance ×1
python-2.7 ×1
seaborn ×1
statistics ×1
variance ×1