初学者与熊猫数据帧.我在下面的数据集中缺少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的缺失值?
我有这个代码,生成一个直方图,识别三种类型的字段; "低","中"和"高":
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)
产生这个:
如何在这里获得三种不同颜色的图例?
我使用此示例将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) 我有这个代码,使用熊猫 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,所以我想用这个。
我正在尝试将 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
,也许使用?
我有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) 我有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?
我试图从这个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) 我有这个 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) 初学者熊猫/蟒蛇用户。我在 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 ×10
pandas ×7
dataframe ×4
matplotlib ×2
sqlalchemy ×2
histogram ×1
numpy ×1
seaborn ×1
sqlite ×1