我试图groupby
使用代码绘制一个pandas 对象fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))
问题是绘图图例列表['battery']
为图例值.如果它为groupby
对象中的每个项目绘制一条线,则更有意义的是在图例中绘制这些值.但是我不知道该怎么做.任何帮助,将不胜感激.
数据
time imei battery_raw
0 2016-09-30 07:01:23 862117020146766 42208
1 2016-09-30 07:06:23 862117024146766 42213
2 2016-09-30 07:11:23 862117056146766 42151
3 2016-09-30 07:16:23 862117995146745 42263
4 2016-09-30 07:21:23 862117020146732 42293
Run Code Online (Sandbox Code Playgroud)
完整代码
for i in entity:
fil = df[(df['entity_id']==i)]
fig, ax = plt.subplots(figsize=(18,6))
fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))
plt.legend(fil.imei)
plt.show()
Run Code Online (Sandbox Code Playgroud)
目前的情节
我试图理解使用sklearn python模块中的kfolds交叉验证.
我理解基本流程:
model = LogisticRegression()
model.fit(xtrain, ytrain)
model.predict(ytest)
我很困惑的地方是使用具有交叉val分数的sklearn kfolds.据我了解,cross_val_score函数将适合模型并在kfolds上进行预测,为每个折叠提供准确度分数.
例如使用这样的代码:
kf = KFold(n=data.shape[0], n_folds=5, shuffle=True, random_state=8)
lr = linear_model.LogisticRegression()
accuracies = cross_val_score(lr, X_train,y_train, scoring='accuracy', cv = kf)
Run Code Online (Sandbox Code Playgroud)
因此,如果我有一个包含训练和测试数据的数据集,并且我使用cross_val_score
kfolds函数来确定算法对每个折叠的训练数据的准确性,那么model
现在是否适合并准备好对测试数据进行预测?所以在上面的情况下使用lr.predict
谢谢你的帮助.
我相信这相对容易,但我似乎无法使其发挥作用.我想绘制这个df,使用matplotlib模块将日期作为x轴,将气体作为y轴,将std作为错误栏.我可以使用pandas包装器来使用它,但后来我不知道如何设置错误栏的样式.
使用pandas matplotlib包装器
我可以使用matplotlib pandas包装器绘制错误栏trip.plot(yerr='std', ax=ax, marker ='D')
然后我不知道如何访问错误栏来设置它们就像在matplotlib中使用它一样plt.errorbar()
使用Matplotlib
fig, ax = plt.subplots()
ax.bar(trip.index, trip.gas, yerr=trip.std)
Run Code Online (Sandbox Code Playgroud)
要么
plt.errorbar(trip.index, trip.gas, yerr=trip.std)
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出了这个错误 TypeError: unsupported operand type(s) for -: 'float' and 'instancemethod'
基本上,我想要帮助的是使用标准matplotlib模块而不是pandas包装器绘制错误栏.
DF ==
date gas std
0 2015-11-02 6.805351 7.447903
1 2015-11-03 4.751319 1.847106
2 2015-11-04 2.835403 0.927300
3 2015-11-05 7.291005 2.250171
Run Code Online (Sandbox Code Playgroud) 我在 Pandas 中有一个数据框,我正在从 csv 中读取它。
我的一个列有值,其中包括NaN
,floats
,和科学记数法,即5.3e-23
我的问题是,当我在 csv 中阅读时,pandas 将这些数据视为object dtype
,而不是float32
应该的。我猜是因为它认为科学记数法条目是字符串。
我尝试df['speed'].astype(float)
在读入后使用 using 转换 dtype ,并尝试在使用df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a'])
. 这会引发错误ValueError: cannot safely convert passed user dtype of <f4 for object dtyped data in column ...
到目前为止,这两种方法都没有奏效。我是否错过了一些非常容易修复的东西?
这个问题似乎表明我可以指定可能会引发错误的已知数字,但如果可能的话,我更愿意将科学记数法转换回浮点数。
编辑以在评论中显示来自 CSV 的数据
7425616,12375,28,2015-08-09 11:07:56,0,-8.18644,118.21463,2,0,2
7425615,12375,28,2015-08-09 11:04:15,0,-8.18644,118.21463,2,NaN,2
7425617,12375,28,2015-08-09 11:09:38,0,-8.18644,118.2145,2,0.14,2
7425592,12375,28,2015-08-09 10:36:34,0,-8.18663,118.2157,2,0.05,2
65999,1021,29,2015-01-30 21:43:26,0,-8.36728,118.29235,1,0.206836151554794,2
204958,1160,30,2015-02-03 17:53:37,2,-8.36247,118.28664,1,9.49242000872744e-05,7
384739,,32,2015-01-14 16:07:02,1,-8.36778,118.29206,2,Infinity,4
275929,1160,30,2015-02-17 03:13:51,1,-8.36248,118.28656,1,113.318511172611,5
Run Code Online (Sandbox Code Playgroud) 我使用Pandas包装器counts.plot(kind='pie')
和Matplotlib直接`plt.pie(计数)生成了一个饼图.
问题是标签.使用饼图正确表示值=饼楔,但是当我开始引入自定义颜色和图例时,标签会关闭.
饼图标签是正确的,但图例标签是根据其标签顺序绘制的group_name
,而不是其值.有想法该怎么解决这个吗?
代码=
group_names = ['2-3 km', '3-5 km','5-7 km','7-10 km','10-20 km','20-50 km','50-75 km','75-100 km','>100 km']
df['bins'] = pd.cut(df['distkm'], bins)
df['categories'] = pd.cut(df['distkm'], bins, labels=group_names)
counts = df['categories'].value_counts()
plt.axis('equal')
explode = (0, 0, 0,0.1,0.1,0.2,0.3,0.4,0.6)
colors = ['#191970','#001CF0','#0038E2','#0055D4','#0071C6','#008DB8','#00AAAA','#00C69C','#00E28E','#00FF80',]
counts.plot(kind='pie', fontsize=17,colors=colors,explode=explode)
plt.legend(labels=group_names,loc="best")
plt.show()
Run Code Online (Sandbox Code Playgroud)
数据看起来像
20-50 km 1109
50-75 km 696
10-20 km 353
75-100 km 192
3-5 km 168
7-10 km 86
5-7 km 74
>100 km 65
2-3 km 53
dtype: int64
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的辅助y标签旋转到270 degrees
,但是当我这样做时,它传递了rotate=270
参数,它重叠了我的y-tick文本.任何想法如何解决这一问题?
fig, ax = plt.subplots()
ax.plot(df.index,df.tripTime,label='Fishing Effort', marker='D')
ax2=ax.twinx()
ax2.plot(tr.index,tr.cost, 'g',label='Fuel Expenditure', marker='d')
lines = ax.get_lines() + ax2.get_lines()
ax.legend(lines,[line.get_label() for line in lines], loc='lower left')
ax.set_ylim((0, 18))
ax2.set_ylabel('Cost ($)',color='g', rotation=270)
for tl in ax2.get_yticklabels():
tl.set_color('g')
ax.set_ylabel('Fishing Effort (hrs)')
ax.set_xlabel('Time (days)')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个列,如果行值落在 09:00 和 17:00 之间,则该列将分配为 true。
我可以很容易地使用这些时间来选择这些时间,between_time
但不能分配一个新列 a True
, False
。
df = df.between_time('9:00', '17:00', include_start=True, include_end=True)
Run Code Online (Sandbox Code Playgroud)
此语句选择适当的行,但我无法为它们分配 True-False 值。
我一直在尝试使用np.where
.
df['day'] = np.where(df.between_time('9:00', '17:00', include_start=True, include_end=True),'True','False')
Run Code Online (Sandbox Code Playgroud)
除了np.where
仅适用于布尔表达式。
我是这样用的:
df['day'] = np.where((df['dayTime'] < '09:00') & (df['dayTime'] > '17:00'),'True','False')
Run Code Online (Sandbox Code Playgroud)
但只得到了False returns
,因为一个值不能同时大于 17 和小于 9。
我错过了一个相对简单的步骤,无法弄清楚。帮助。
我有一个失败的SQL查询,给我错误:
"有一个表的条目,但它不能从查询的这一部分引用"
通过查询,我需要所有3个表,但只有旅行和船只有匹配的ID才能加入.Test是一个shapefile,我需要执行一个postGIS函数,但它与其他两个没有相似的列id.
select trips.*
from trips, test
inner join boats on boats.id = trips.boat_id
where st_intersects(trips.geom, test.geom) and
boats.uid = 44
Run Code Online (Sandbox Code Playgroud)
我认为它与join语句有关,但我真的不明白.我对这里发生的事情的解释非常感兴趣.
试图学习一些东西,我正在搞乱Kaggle上的全球鲨鱼攻击数据库,我正试图找到使用lambda
函数和字符串来填充字符串的最佳方法str.contains
.
基本上任何字符串都包含一个短语,skin diving
例如'skin diving for abalone'
,在data['Activity']
列中我想用活动替换活动skin diving
.(皮肤潜水有92种变种因此尝试使用lambda功能)
我可以使用返回一个布尔系列
data['Activity].str.contains('skin diving')
Run Code Online (Sandbox Code Playgroud)
但是如果这个条件成立,我不确定如何更改值
我的lambda函数= data.apply(lambda x: 'free diving' if x.str.contains('free diving))
但我得到一个语法错误,我不熟悉lambda函数和pandas来做对,任何帮助将不胜感激.
对于bigquery标准sql
我正在尝试找出适当的语法来查找数组是否包含 2 个或更多字符串元素。
例如,如果数组 = ["5","6","7","8"]
期望的情况是这样的,
case "7" OR "8" in unnest(myArray) WHEN TRUE THEN
'value is in array'
ELSE 'value is not in array' end
Run Code Online (Sandbox Code Playgroud)
我可以得到单个值作为 True 返回,但不能返回多个值,即这工作正常
case "7" in unnest(myArray) WHEN TRUE THEN
'value is in array'
ELSE 'value is not in array' end
Run Code Online (Sandbox Code Playgroud)
我还可以使用嵌套的 case 语句,但我真正需要的是 OR 语法,而不是如果这是 true 则移动到 nxt 值。
我可以在文档中的任何地方找到它。有高手愿意帮忙吗?
python ×8
pandas ×5
matplotlib ×4
plot ×2
arrays ×1
charts ×1
csv ×1
kaggle ×1
lambda ×1
postgis ×1
postgresql ×1
scikit-learn ×1
sql ×1