我有一个包含多个列和行的数据框df1.简单的例子:
TIME T1 T2
1 10 100
2 20 200
3 30 300
Run Code Online (Sandbox Code Playgroud)
我想创建一个空的数据框df2以及稍后,添加带有计算结果的新列.
在这一刻,我的代码看起来像这样:
df1=pd.read_csv("1.txt",index_col="TIME")
df2=df1.copy()[[]] #copy df1 and erase all columns
Run Code Online (Sandbox Code Playgroud)
...添加两个新列:
df2["results1"],df2["results2"]=df1["T1"]*df["T2"]*3,df1["T2"]+100
Run Code Online (Sandbox Code Playgroud)
有没有更好/更安全/更快的方法来做到这一点?是否可以创建一个空数据框df2并仅从df1复制索引?
我想导入由 3rd 方应用程序使用 UCS-2 LE 编码生成的 10K csv 文件。我不想使用 csv 阅读器,例如Python UTF-16,因为文件太多。
您可以在下面找到我的代码,我正在尝试仅阅读其中的一个。我正在使用 Python 3.4 和 Pandas 0.18.1
微量元素:
import pandas as pd
df = pd.read_csv('1.csv',
encoding="mbcs",
skip_blank_lines=True,
error_bad_lines=False,
decimal=',',
sep='\s+')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
CParserError:标记数据时出错。C 错误:从第 17 行开始的字符串内有 EOF
我想更改单个子图的颜色:
1.手动指定图的期望颜色
2.使用随机颜色
基本代码(取自1)
df = DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
df.plot(subplots=True)
plt.legend(loc='best')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我尝试了这个:
colors = ['r','g','b','r'] #first option
colors = list(['r','g','b','r']) #second option
colors = plt.cm.Paired(np.linspace(0,1,4)) #third option
df.plot(subplots=True, color=colors)
Run Code Online (Sandbox Code Playgroud)
但是所有这些都不起作用。我发现2,但不确定如何更改:
plots=df.plot(subplots=True)
for color in plots:
??????
Run Code Online (Sandbox Code Playgroud) 我有一个 DataFrame df1(索引为日期时间)并且df2有很多列,不同长度的索引。
我需要结合df1使用df2,以替代指标df2。结果出现了df3。
df1
T1
2011-09-01 00:00:00 10
2011-09-01 00:10:00 20
2011-09-01 00:20:00 30
2011-09-01 00:30:00 40
df2
T2 T3
0 1.1 2.0
1 1.2 3.0
2 1.3 4.0
df3
T1 T2 T3
2011-09-01 00:00:00 10 1.1 2.0
2011-09-01 00:10:00 20 1.2 3.0
2011-09-01 00:20:00 30 1.3 4.0
2011-09-01 00:30:00 40 Nan Nan
Run Code Online (Sandbox Code Playgroud)
我想尝试,concat, join, merge, append但这些似乎不合适。
使用set_index导致出现错误:长度不匹配。
我最终尝试这样做:
df3=pd.DataFrame(df2,index=df1.index,copy=True)
Run Code Online (Sandbox Code Playgroud)
我得到了所需的索引和列,df2但它们是空的。
假设一个数据帧df的例子:
A
0 4.3
1 75
2 8.5
3 4.0
4 98
Run Code Online (Sandbox Code Playgroud)
我需要将每个值从列移动A到每列 - 每列一个值:
B,C,期望的输出:
A B C D E
0 4.3 NaN NaN NaN NaN
1 NaN 75 NaN NaN NaN
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN 4.0 NaN
4 NaN NaN NaN Nan 98
Run Code Online (Sandbox Code Playgroud)
一个想法是将每个值复制到第二列,然后在前一列中删除它或shift从一列到另一列的值,但我不知道如何应用这个...
MWE
import pandas as pd
import numpy as np
df=pd.DataFrame(data=np.random.randint(0,100,(5,5)), columns=['A','B','C','D','E'])
df.iloc[:,1:] =np.nan
df.iloc[[1],[1]] = …Run Code Online (Sandbox Code Playgroud) 我想绘制12个图表(每月一个图表),包括列'A'和'B'左侧y轴,以及'C'右侧的列。
下面的代码在左侧绘制了所有内容。
import pandas as pd
index=pd.date_range('2011-1-1 00:00:00', '2011-12-31 23:50:00', freq='1h')
df=pd.DataFrame(np.random.rand(len(index),3),columns=['A','B','C'],index=index)
df2 = df.groupby(lambda x: x.month)
for key, group in df2:
group.plot()
Run Code Online (Sandbox Code Playgroud)
如何分离柱和使用这样的:group.plot({'A','B':style='g'},{'C':secondary_y=True})?
我想在一个简单的例子中更改辅助Y轴的范围:
MWE:
index=pd.date_range('2014-1-1 00:00:00', '2014-12-31 23:50:00', freq='1h')
df=pd.DataFrame(np.random.randn(len(index),3).cumsum(axis=0),columns=['A','B','C'],index=index)
df_month = df.groupby(lambda x: x.month)
df_month.plot(secondary_y=['C'],mark_right=False)
Run Code Online (Sandbox Code Playgroud)
在groupby.plot功能中我只能为左轴设置ylim.如何更改右轴范围?
我也试图循环键入groupby:
for key, group in df_month:
ax = group[['A','B']].plot()
fig= group[['C']].plot(secondary_y=True, ax=ax, mark_right=False)
Run Code Online (Sandbox Code Playgroud)
使用ax2 = ax1.twinx()变体,但它没有成功.
我有一个包含这样数据的文件:
2.10.2014 23:30:00,"25,1",nan,nan,nan
2.10.2014 23:30:00,nan,"15,2",nan,nan
2.10.2014 23:30:00,nan,nan,"125,14",nan
2.10.2014 23:45:00,nan,0,nan,nan
Run Code Online (Sandbox Code Playgroud)
我想读这个文件.所需的输出:
2.10.2014 23:30:00 25.1 nan nan nan
2.10.2014 23:30:00 nan 15.2 nan nan
2.10.2014 23:30:00 nan nan 125.14 nan
2.10.2014 23:45:00 nan 0 nan nan
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,如果0出现值,引号就会消失.
在这一刻,我的代码看起来像这样:
import pandas as pd
import csv
df=pd.read_csv("file.csv",
sep=',\s+',
quoting=csv.QUOTE_NONE,
header=None,
encoding="mbcs")
Run Code Online (Sandbox Code Playgroud)
结果是:
"2.10.2014 23:30:00,""25,1"",nan,nan,nan"
Run Code Online (Sandbox Code Playgroud)
而不是quoting=csv.QUOTE_NONE我也试过使用escapechar='"'
我想绘制特定列的条形图和折线图。
使用agg函数,我得到了与函数一样多的新列。如果我只想绘制列的总和A和列的均值,我该怎么办B?

您可以在下面找到我的代码,其中绘制了所有列。
index=pd.date_range('2013-1-1 00:00', '2013-12-31 23:00', freq='1h')
df=pd.DataFrame(np.random.rand(len(index),2),index=index, columns=['A','B'])
df2=df.groupby(lambda x: x.month).agg({'A' : [np.mean, np.sum], 'B': np.mean})
fig = plt.figure()
ax = df2['A'].plot(kind="bar");plt.xticks(rotation=0)
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),df2['B'],marker='o')
Run Code Online (Sandbox Code Playgroud)
你能给我一些如何解决这个问题的提示吗?先感谢您!