- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CSV 文件,格式如下:
DATES, 01-12-2010, 01-12-2010, 01-12-2010, 02-12-2010, 02-12-2010, 02-12-2010
UNITS, Hz, kV, MW, Hz, kV, MW
Interval, , , , , ,
00:15, 49.82, 33.73755, 34.65, 49.92, 33.9009, 36.33,
00:30, 49.9, 33.7722, 35.34, 49.89, 33.8382, 37.65,
00:45, 49.94, 33.8316, 33.5, 50.09, 34.07745, 37.41,
01:00, 49.86, 33.94875, 30.91, 50.18, 34.20945, 36.11,
01:15, 49.97, 34.2243, 27.28, 50.11, 34.3596, 33.24,
01:30, 50.02, 34.3332, 26.91, 50.12, 34.452, 31.03,
01:45, 50.01, 34.1286, 31.26, 50, 33.9306, 38.86,
02:00, 50.08, 33.9141, 34.96, 50.14, 33.99165, 38.31,
02:15, 50.07, 33.84975, 35.33, 50.01, 33.9537, 39.78,
02:30, 49.97, 34.0263, 33.63, 50.07, 33.8547, 41.48,
我想将以上内容转换为以下格式的数据框:
Hz kV MW
DATES_Interval
01-12-2010 00:15 49.82 33.73755 34.65
01-12-2010 00:30 49.9 33.7722 35.34
01-12-2010 00:45 49.94 33.8316 33.5
01-12-2010 01:00 49.86 33.94875 30.91
01-12-2010 01:15 49.97 34.2243 27.28
01-12-2010 01:30 50.02 34.3332 26.91
01-12-2010 01:45 50.01 34.1286 31.26
01-12-2010 02:00 50.08 33.9141 34.96
01-12-2010 02:15 50.07 33.84975 35.33
01-12-2010 02:30 49.97 34.0263 33.63
02-12-2010 00:15 49.92 33.9009 36.33
02-12-2010 00:30 49.89 33.8382 37.65
02-12-2010 00:45 50.09 34.07745 37.41
02-12-2010 01:00 50.09 34.07745 37.41
02-12-2010 01:15 50.11 34.3596 33.24
02-12-2010 01:30 50.12 34.452 31.03
02-12-2010 01:45 50 33.9306 38.86
02-12-2010 02:00 50.14 33.99165 38.31
02-12-2010 02:15 50.01 33.9537 39.78
02-12-2010 02:30 50.07 33.8547 41.48
我如何用 pandas 做到这一点?
最佳答案
在 pandas 中做这种事情的关键是 stack()
方法:
df.stack(level=0)
但是,我发现到达一个可以使用它的地方,至少特定的 csv 是棘手的。至少可以这么说(几乎肯定有更好的方法来做到这一点!):
df_data = pd.read_csv('e.csv', sep=',\s+', header=None, skiprows=3)[range(7)].set_index(0)
df_cols = pd.read_csv('e.csv', sep=',\s+', header=None, nrows=2).set_index(0)[:2] #interval causing problems
df_ = df_cols.append(df_data).T.set_index(['DATES','UNITS','Interval']).T
df = df_.stack(level=0)
df_dates = map(lambda x: pd.to_datetime(' '.join(x[::-1])), df.index)
df.index = df_dates
In [7]: df
Out[7]:
UNITS Hz MW kV
2010-01-12 00:15:00 49.82 34.65 33.73755
2010-02-12 00:15:00 49.92 36.33, 33.9009
2010-01-12 00:30:00 49.9 35.34 33.7722
2010-02-12 00:30:00 49.89 37.65, 33.8382
2010-01-12 00:45:00 49.94 33.5 33.8316
2010-02-12 00:45:00 50.09 37.41, 34.07745
2010-01-12 01:00:00 49.86 30.91 33.94875
2010-02-12 01:00:00 50.18 36.11, 34.20945
2010-01-12 01:15:00 49.97 27.28 34.2243
2010-02-12 01:15:00 50.11 33.24, 34.3596
2010-01-12 01:30:00 50.02 26.91 34.3332
2010-02-12 01:30:00 50.12 31.03, 34.452
2010-01-12 01:45:00 50.01 31.26 34.1286
2010-02-12 01:45:00 50 38.86, 33.9306
2010-01-12 02:00:00 50.08 34.96 33.9141
2010-02-12 02:00:00 50.14 38.31, 33.99165
2010-01-12 02:15:00 50.07 35.33 33.84975
2010-02-12 02:15:00 50.01 39.78, 33.9537
2010-01-12 02:30:00 49.97 33.63 34.0263
2010-02-12 02:30:00 50.07 41.48, 33.8547
这有点乱,有些列中有逗号!
def clean(s):
try: return float(s.strip(','))
except: return s
In [9]: df.applymap(clean)
Out[9]:
Hz MW kV
2010-01-12 00:15:00 49.82 34.65 33.73755
2010-02-12 00:15:00 49.92 36.33 33.90090
2010-01-12 00:30:00 49.90 35.34 33.77220
2010-02-12 00:30:00 49.89 37.65 33.83820
2010-01-12 00:45:00 49.94 33.50 33.83160
2010-02-12 00:45:00 50.09 37.41 34.07745
2010-01-12 01:00:00 49.86 30.91 33.94875
2010-02-12 01:00:00 50.18 36.11 34.20945
2010-01-12 01:15:00 49.97 27.28 34.22430
2010-02-12 01:15:00 50.11 33.24 34.35960
2010-01-12 01:30:00 50.02 26.91 34.33320
2010-02-12 01:30:00 50.12 31.03 34.45200
2010-01-12 01:45:00 50.01 31.26 34.12860
2010-02-12 01:45:00 50.00 38.86 33.93060
2010-01-12 02:00:00 50.08 34.96 33.91410
2010-02-12 02:00:00 50.14 38.31 33.99165
2010-01-12 02:15:00 50.07 35.33 33.84975
2010-02-12 02:15:00 50.01 39.78 33.95370
2010-01-12 02:30:00 49.97 33.63 34.02630
2010-02-12 02:30:00 50.07 41.48 33.85470
关于pandas - 将 csv 文件转换为 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14514046/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!