小编war*_*nry的帖子

使用pandas数据框中的前向和后向填充填充缺失值(ffill和bfill)

初学者与熊猫数据帧.我在下面的数据集中缺少A列和B列的值(Test.csv):

DateTime              A             B
01-01-2017 03:27        
01-01-2017 03:28        
01-01-2017 03:29    0.18127718  -0.178835737
01-01-2017 03:30    0.186923018 -0.183260853
01-01-2017 03:31        
01-01-2017 03:32        
01-01-2017 03:33    0.18127718  -0.178835737
Run Code Online (Sandbox Code Playgroud)

我可以使用此代码使用向前传播填充值,但这仅适用于03:31和03:32,而不是03:27和03:28.

import pandas as pd
import numpy as np

df = pd.read_csv('test.csv', index_col = 0)
data = df.fillna(method='ffill')
ndata = data.to_csv('test1.csv')
Run Code Online (Sandbox Code Playgroud)

结果是:

   DateTime              A             B
    01-01-2017 03:27        
    01-01-2017 03:28        
    01-01-2017 03:29    0.18127718  -0.178835737
    01-01-2017 03:30    0.186923018 -0.183260853
    01-01-2017 03:31    0.186923018 -0.183260853
    01-01-2017 03:32    0.186923018 -0.183260853
    01-01-2017 03:33    0.18127718  -0.178835737
Run Code Online (Sandbox Code Playgroud)

我如何使用backfil包含'Bfill'来填补03:27和03:28的缺失值?

python dataframe pandas

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

带有图例的matplotlib直方图

我有这个代码,生成一个直方图,识别三种类型的字段; "低","中"和"高":

import pylab as plt
import pandas as pd


df = pd.read_csv('April2017NEW.csv', index_col =1)
df1 = df.loc['Output Energy, (Wh/h)']  # choose index value and Average
df1['Average'] = df1.mean(axis=1)

N, bins, patches = plt.hist(df1['Average'], 30)

cmap = plt.get_cmap('jet')
low = cmap(0.5)
medium =cmap(0.25)
high = cmap(0.8)


for i in range(0,4):
    patches[i].set_facecolor(low)
for i in range(4,11):
    patches[i].set_facecolor(medium)
for i in range(11,30):
    patches[i].set_facecolor(high)

plt.xlabel("Watt Hours", fontsize=16)  
plt.ylabel("Households", fontsize=16)
plt.xticks(fontsize=14)  
plt.yticks(fontsize=14)
ax = plt.subplot(111)  
ax.spines["top"].set_visible(False)  
ax.spines["right"].set_visible(False)

plt.show()
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此输入图像描述

如何在这里获得三种不同颜色的图例?

python matplotlib histogram

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

使用sqlalchemy将CSV导入数据库

我使用示例将csv文件上载到sqlite数据库:

这是我的代码:

from numpy import genfromtxt
from time import time
from datetime import datetime
from sqlalchemy import Column, Integer, Float, Date, String, VARCHAR
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

def Load_Data(file_name):
    data = genfromtxt(file_name, delimiter=',')# skiprows=1, converters={0: lambda s: str(s)})
    return data.tolist()

Base = declarative_base()

class cdb1(Base):
    #Tell SQLAlchemy what the table name is and if there's any table-specific arguments it should know about
    __tablename__ = 'cdb1'
    __table_args__ = {'sqlite_autoincrement': True}
    #tell …
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy

8
推荐指数
1
解决办法
7762
查看次数

Matplotlib/seaborn 直方图使用不同颜色的分组箱

我有这个代码,使用熊猫 df:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os


path_to = 'Data\\2017-04\\MonthlyData\q1analysis\Energy Usage'  # where to save

df = pd.read_csv('April2017NEW.csv', index_col =1)


df1 = df.loc['Output Energy, (Wh/h)']  # choose index value and Average
df1['Average'] = df1.mean(axis=1)
print df1
print df1['Average'].describe()

def hist():
    p = sns.distplot(df1['Average'],kde=False, bins=25).set(xlim=(0, 100));
    plt.xlabel('Watt hours')
    plt.ylabel('Households')

    return plt.show()
Run Code Online (Sandbox Code Playgroud)

返回:

在此处输入图片说明

我想使用三种不同的颜色(低、中、高)来用图例表示 x = 轴上的更高值,如下所示:

在此处输入图片说明

编辑1:

我找到了这个例子:here,所以我想用这个。

我想出了这个: 在此处输入图片说明 几乎就在那里。如何将范围分成 3 个,具有 3 种不同的颜色?

python matplotlib seaborn

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

Pandas df 使用flask-sqlalchemy 到数据库

我正在尝试将 Pandas 数据框插入到 mysql 数据库中。我正在使用flask-sqlalchemy。

我创建了这个表:

class Client_Details(db.Model):
    __tablename__ = "client_history"

    client_id = db.Column(db.Integer, primary_key=True)
    client_name = db.Column(db.VARCHAR(50))
    shack= db.Column(db.VARCHAR(50))
Run Code Online (Sandbox Code Playgroud)

我想将此 df 中的数据插入其中:

index   name     shack
0        jay       H9
1        ray       I8
2        t-bop     I6
3        jay-k     F89
4        phil      D89
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用:

for index, row in df.iterrows():
    client_add = client_history(client_name = row[1], shack =row[2])
    db.session.add(client_add)
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点to_sql,也许使用?

python sqlalchemy pandas flask-sqlalchemy

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

Pandas dataframe列中的第一个值实例

我有df:

                     Voltage
01-02-2017 00:00       13.1
01-02-2017 00:01       13.2
01-02-2017 00:02       13.3
01-02-2017 00:03       14.1
01-02-2017 00:04       14.3
01-02-2017 00:04       13.5
Run Code Online (Sandbox Code Playgroud)

我希望电压列中的值> = 14.0时的第一个实例的时间(hh:mm)."完全充电时间"列中应该只有一个时间值.

                     Voltage   Time of Full Charge
01-02-2017 00:00       13.1
01-02-2017 00:01       13.2
01-02-2017 00:02       13.3
01-02-2017 00:03       14.1         00:03
01-02-2017 00:04       14.3
01-02-2017 00:04       13.5
Run Code Online (Sandbox Code Playgroud)

我正在尝试这些方面的东西,但无法弄清楚:

df.index = pd.to_datetime(df.index)
df.['Time of Full Charge'] = np.where(df.['Voltage'] >= 14.0), (df.index.hour:df.index.minute))    
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

熊猫diff()为第一个差异给出0值

我有df:

Hour  Energy Wh  
1        4          
2        6           
3        9
4        15
Run Code Online (Sandbox Code Playgroud)

我想添加一列来显示每小时的差异。我正在使用这个:

df['Energy Wh/h'] = df['Energy Wh'].diff().fillna(0)
Run Code Online (Sandbox Code Playgroud)

df1:

Hour  Energy Wh  Energy Wh/h
1        4          0
2        6          2 
3        9          3
4        15         6
Run Code Online (Sandbox Code Playgroud)

但是,小时1值在“能量Wh / h”列中显示为0,而我希望它显示为4,如下所示:

Hour  Energy Wh  Energy Wh/h
1        4          4
2        6          2 
3        9          3
4        15         6
Run Code Online (Sandbox Code Playgroud)

我尝试使用np.where:

df['Energy Wh/h']  = np.where(df['Hour'] == 1,df['Energy Wh'].diff().fillna(df['Energy Wh']),df['Energy Wh'].diff().fillna(0))
Run Code Online (Sandbox Code Playgroud)

但是我在小时1行(df1)中仍然得到0值,没有错误。如何获得要填充的小时1的“能量Wh”中的值,而不是0?

python numpy dataframe pandas

4
推荐指数
2
解决办法
3930
查看次数

Pandas删除列包含*的行

我试图从这个df中删除列'DB Serial'包含字符*的所有行:

    DB Serial
0     13058
1     13069
2    *13070
3     13070
4     13044
5     13042
Run Code Online (Sandbox Code Playgroud)

我在用:

df = df[~df['DB Serial'].str.contains('*')]
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

    raise error, v # invalid expression
error: nothing to repeat
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
4406
查看次数

熊猫将列转换为日期时间

我有这个 df:

    A
0   2017-04-17 00:00:00
1   2017-04-18 00:00:00
2   2017-04-19 00:00:00
3   2017-04-20 00:00:00
4   2017-04-21 00:00:00
Run Code Online (Sandbox Code Playgroud)

我试图摆脱 H、M、S,这样我就剩下:

     A
0   2017-04-17
1   2017-04-18 
2   2017-04-19 
3   2017-04-20 
4   2017-04-21 
Run Code Online (Sandbox Code Playgroud)

A列的数据类型是对象。我试过了:

df['A'] = df['A']datetime.strftime('%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

和:

import datetime as datetime
Run Code Online (Sandbox Code Playgroud)

我得到:

AttributeError: 'Series' object has no attribute 'strftime'
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
7515
查看次数

在 Pandas 数据框中附加日期时间行和前向填充数据

初学者熊猫/蟒蛇用户。我在 Pandas 数据框中使用 24 小时数据,但是通常在一天的最后几分钟没有数据。

我只需要将行附加到每个文件中,直到最后一个时间戳达到 23.59,然后用数据向前填充最后几分钟。所以这:

    19-12-2016 00:00    2   0.003232323
    ...
    19-12-2016 23:53    2   0.002822919
    19-12-2016 23:54    4   0.002822919
    19-12-2016 23:55    1   0.002822919
Run Code Online (Sandbox Code Playgroud)

变成:

    19-12-2016 00:00    2   0.003232323
    ...
    19-12-2016 23:53    2   0.002822919
    19-12-2016 23:54    4   0.002822919
    19-12-2016 23:55    1   0.002822919
    19-12-2016 23:56    1   0.002822919
    19-12-2016 23:57    1   0.002822919
    19-12-2016 23:58    1   0.002822919
    19-12-2016 23:59    1   0.002822919
Run Code Online (Sandbox Code Playgroud)

不幸的是,我为此使用的代码真的很长,我无法准确指出我可以在哪里修改它。

python dataframe pandas

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