小编hse*_*bie的帖子

Pandas groupby在剧情中的传说中的对象

我试图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)

目前的情节

在此输入图像描述

python plot matplotlib pandas

10
推荐指数
1
解决办法
8338
查看次数

使用sklearn cross_val_score和kfolds来拟合并帮助预测模型

我试图理解使用sklearn python模块中的kfolds交叉验证.

我理解基本流程:

  • 实例化一个模型,例如 model = LogisticRegression()
  • 拟合模型,例如 model.fit(xtrain, ytrain)
  • 预测例如 model.predict(ytest)
  • 使用例如交叉val分数来测试拟合的模型精度.

我很困惑的地方是使用具有交叉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_scorekfolds函数来确定算法对每个折叠的训练数据的准确性,那么model现在是否适合并准备好对测试数据进行预测?所以在上面的情况下使用lr.predict

谢谢你的帮助.

python machine-learning scikit-learn cross-validation

9
推荐指数
1
解决办法
5374
查看次数

使用pandas数据框绘制错误条matplotlib

我相信这相对容易,但我似乎无法使其发挥作用.我想绘制这个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)

python plot matplotlib pandas

7
推荐指数
1
解决办法
8949
查看次数

熊猫读科学记数法和变化

我在 Pandas 中有一个数据框,我正在从 csv 中读取它。

我的一个列有值,其中包括NaNfloats,和科学记数法,即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)

python csv pandas

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

Matplotlib,熊猫,饼图标签错误

我使用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)

python charts matplotlib

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

如何旋转辅助y轴标签,使其不与y-ticks,matplotlib重叠

我正在尝试将我的辅助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)

在此输入图像描述

python matplotlib

5
推荐指数
1
解决办法
2952
查看次数

熊猫 between_time 布尔值

我正在尝试创建一个列,如果行值落在 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。

我错过了一个相对简单的步骤,无法弄清楚。帮助。

python pandas

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

SQL连接,"有一个表的条目,但它不能被引用"

我有一个失败的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语句有关,但我真的不明白.我对这里发生的事情的解释非常感兴趣.

sql postgresql postgis

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

使用lambda条件和pandas str.contains来整理字符串

试图学习一些东西,我正在搞乱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来做对,任何帮助将不胜感激.

python lambda pandas kaggle

3
推荐指数
2
解决办法
9369
查看次数

检查 BigQuery ARRAY 中是否有多个元素

对于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 值。

我可以在文档中的任何地方找到它。有高手愿意帮忙吗?

arrays google-bigquery

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