我觉得这个问题以前一定是有人回答的,但我找不到堆栈溢出的答案!
我有一个result
看起来像这样的数据框,我想删除所有小于或等于 10 的值
>>> result
Name Value Date
189 Sall 19.0 11/14/15
191 Sam 10.0 11/14/15
192 Richard 21.0 11/14/15
193 Ingrid 4.0 11/14/15
Run Code Online (Sandbox Code Playgroud)
此命令有效并删除10的所有值:
df2 = result[result['Value'] != 10]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加<=限定符时,我收到错误消息 SyntaxError: invalid syntax
df3 = result[result['Value'] ! <= 10]
Run Code Online (Sandbox Code Playgroud)
我觉得可能有一个非常简单的解决方案.提前致谢!
我有两个变量
x = [1.883830, 7.692308,8.791209, 9.262166]
y = [5.337520, 4.866562, 2.825746, 6.122449]
Run Code Online (Sandbox Code Playgroud)
而且我想使用包裹在matplotlib中的seaborn来拟合高斯分布.看起来这个sns.distplot
函数是最好的方法,但我无法弄清楚如何填充曲线下的区域.救命?
fig, ax = plt.subplots(1)
sns.distplot(x,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="red", label="2016", fit_kws={'color':'red'});
sns.distplot(y,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="blue", label="2017", fit_kws={'color':'blue'})
Run Code Online (Sandbox Code Playgroud)
我认为"阴影"论点可能是争论的一部分,fit_kws
但我还没有得到这个.
另一种选择是使用ax.fill()
?
我想在python中创建一个条形图,其中包含多个x类别,数据计数为"是"或"否".我已经开始使用一些代码,但我相信我正在以一种缓慢的方式获得我想要的解决方案.我可以使用seaborn,Matplotlib或pandas但不是 Bokeh 的解决方案,因为我想制作可扩展的出版品质数字.
最终我想要的是:
这是我正在使用的数据集:
import pandas as pd
data = [{'ship': 'Yes','canoe': 'Yes', 'cruise': 'Yes', 'kayak': 'No','color': 'Red'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'Yes','canoe': 'No','color': 'Green'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'No','canoe': 'No','color': 'Green'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'No','canoe': 'No','color': 'Red'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'Yes','canoe': 'No','color': 'Red'},{'ship': 'No', 'cruise': 'Yes', 'kayak': 'No','canoe': 'Yes','color': 'Green'},{'ship': 'No', 'cruise': 'No', 'kayak': 'No','canoe': 'No','color': 'Green'},{'ship': 'No', 'cruise': 'No', 'kayak': 'No','canoe': 'No','color': 'Red'}]
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
这是我开始的:
print(df['color'].value_counts())
red …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从modifiedmk
R 中的包运行一个函数。
install.packages('modifiedmk')
library(modifiedmk)
Run Code Online (Sandbox Code Playgroud)
我有一个数据框 data
,我使用以下内容生成:
Station <- c('APT','APT', 'APT','APT', 'APT', 'APT', 'APT','APT', 'APT','APT','APT','APT',
'AF','AF', 'AF','AF','AF','AF','AF','AF','AF',
'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL',
'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS'
)
Rainfall <- c(375.3, 263.3, 399.2, 242.6, 847.6, 276.5, 712.8, 366.3, 188.6, 478.4, 539, 682.5,
520.7, 1337.8, 524, 908.4,748.5,411.8, 772.4,978.5,983,
732.4, 788.6, 567.1, 576, 931.6, 727.2, 1079.3, 902.8,493.4, 630.7, 784.1,660.2, …
Run Code Online (Sandbox Code Playgroud) 我是 python 新手,有一个非常简单(希望很简单!)的问题。
假设我有一个包含 3 列的数据框:时间(格式为 YYYY-MM-DDTHH:MM:SSZ)、device_id 和rain,但我需要第一列“时间”成为“的三列”日”、“月”和“年”以及时间戳中的值。
所以原始数据框看起来像这样:
time device_id rain
2016-12-27T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
2016-12-28T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 0.2
2016-12-29T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
2016-12-30T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
2016-12-31T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
Run Code Online (Sandbox Code Playgroud)
但我试图让数据框看起来像这样:
day month year device_id rain
27 12 2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
28 12 2016 9b839362-b06d-4217-96f5-f261c1ada8d6 0.2
29 12 2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
30 12 2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
31 12 2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN
Run Code Online (Sandbox Code Playgroud)
我不关心小时/秒/分钟,但需要原始时间戳中的这些值,我什至不知道从哪里开始。请帮忙!
以下是一些可重现的代码以开始使用:
>> import pandas as pd
>> df = pd.DataFrame([['2016-12-27T00:00:00Z', '9b839362-b06d-4217-96f5-f261c1ada8d6', 'NaN']], columns=['time', 'device_id', 'rain'])
>> print df
2016-12-27T00:00:00Z 9b849362-b06d-4217-96f5-f261c1ada8d6 NaN
Run Code Online (Sandbox Code Playgroud) 假设我有一组这样的坐标,例如:
m <- data.frame(replicate(2,sample(0:9,20,rep=TRUE)))
Run Code Online (Sandbox Code Playgroud)
我想在所有点周围绘制一个框,以便创建一个最小边界矩形。
a <- bounding.box.xy(m)
plot(m)
par(new=T)
plot(a, main="Minimum bounding rectangle")
Run Code Online (Sandbox Code Playgroud)
但是盒子并不能解决所有问题。
我也有兴趣在这些点周围绘制标准偏差圆/椭圆,但是我不知道该功能。
我知道这最终会成为一个非常混乱的情节,但我很想知道最有效的方法是什么.我在csv文件中有一些看起来像这样的数据:
ROI Band Min Max Mean Stdev
1 red_2 Band 1 0.032262 0.124425 0.078073 0.028031
2 red_2 Band 2 0.021072 0.064156 0.037923 0.012178
3 red_2 Band 3 0.013404 0.066043 0.036316 0.014787
4 red_2 Band 4 0.005162 0.055781 0.015526 0.013255
5 red_3 Band 1 0.037488 0.10783 0.057892 0.018964
6 red_3 Band 2 0.02814 0.07237 0.04534 0.014507
7 red_3 Band 3 0.01496 0.112973 0.032751 0.026575
8 red_3 Band 4 0.006566 0.029133 0.018201 0.006897
9 red_4 Band 1 0.022841 0.148666 0.065844 0.0336
10 …
Run Code Online (Sandbox Code Playgroud) 我的目标是创建一个随机点数据集,其直方图看起来像一个指数衰减函数,然后通过这些点绘制指数衰减函数.
首先,我试图从指数分布中创建一系列随机数(但是没有成功,因为这些应该是点,而不是数字).
from pylab import *
from scipy.optimize import curve_fit
import random
import numpy as np
import pandas as pd
testx = pd.DataFrame(range(10)).astype(float)
testx = testx[0]
for i in range(1,11):
x = random.expovariate(15) # rate = 15 arrivals per second
data[i] = [x]
testy = pd.DataFrame(data).T.astype(float)
testy = testy[0]; testy
plot(testx, testy, 'ko')
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样.
然后我定义了一个函数来绘制一条直线:
def func(x, a, e):
return a*np.exp(-a*x)+e
popt, pcov = curve_fit(f=func, xdata=testx, ydata=testy, p0 = None, sigma = None)
print popt # parameters
print pcov # …
Run Code Online (Sandbox Code Playgroud) 一定有一种优雅的方法来做到这一点,但我还没有找到。我有一个大数据框,看起来像这样:
df
Name 0 1 2 3 4
1 apple 2016 W1 NaN NaN NaN NaN
2 orange 2016 W1 2017 W2 NaN NaN NaN
3 banana 2016 W2 2017 W3 NaN NaN NaN
4 pear 2016 W3 2016 W4 2016 W5 NaN NaN
6 melon 2016 W2 2016 W4 2017 W5 2017 W6 2017 W7
Run Code Online (Sandbox Code Playgroud)
我想融合数据,使得只有两列name
和week
。所以结果应该是这样的:
df_result
Name week
apple 2016 W1
orange 2016 W1
orange 2017 W2
banana 2016 W2
banana 2017 W3
pear …
Run Code Online (Sandbox Code Playgroud) 我很震惊,以前没有人在SO上问过这个问题。因为这看起来像是一个简单的问题。
我在pandas Dataframe中只有一列,看起来像这样:
df = pd.DataFrame(data=[['APPLEGATE WINERY 455.292049'],['AMAND FARM 849.827192'],['COBB FARM ST 1039.49357'],['DIRIGIA 2048.947284']], columns = ['Col1'])
Col1
0 APPLEGATE WINERY 455.292049
1 AMAND FARM 849.827192
2 COBB FARM ST 1039.49357
3 DIRIGIA 2048.947284
Run Code Online (Sandbox Code Playgroud)
我只想将字符串字符与数字分开,所以结果应如下所示
Name Area
APPLEGATE WINERY 455.292049
AMAND FARM 849.827192
COBB FARM ST 1039.49357
DIRIGIA 2048.947284
Run Code Online (Sandbox Code Playgroud)
我知道我可以在python中使用正则表达式,但是这似乎有点矫kill过正,因为a)只是数据类型的分离,b)字符串的长度不同,数字的位数不同。
因此,一个结果将开始如下所示:
df['Name'] = df.Col1.str.extract('([A-Z]\w{0,})', expand=True)
df['Area'] = df.Col1.str.extract('(\d)', expand=True)
Run Code Online (Sandbox Code Playgroud)
但是,有没有一种不错的,干净的解决方案可以解决此问题,而又不必经历使用RegEx并将代码中的字符串与数字分成两列的麻烦?