首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSV数据预处理

CSV数据预处理
EN

Stack Overflow用户
提问于 2021-08-16 08:18:04
回答 1查看 50关注 0票数 1

我有一个类似于这种格式的.csv文件

然后我想把它转换成

我怎么才能和巨蟒熊猫一起做呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-16 09:19:03

如果您加载它,那么您将有类似的DataFrame

代码语言:javascript
复制
      Y  M  1  2  3
0  2019  1  A  E  H
1  2020  2  B  F  I
2  2021  3  C  G  J

设置多索引usinig yearmonth

代码语言:javascript
复制
df = df.set_index(['Y','M'])
代码语言:javascript
复制
        1  2  3
Y    M         
2019 1  A  E  H
2020 2  B  F  I
2021 3  C  G  J

使用stack()重塑它

代码语言:javascript
复制
df = df.stack()
代码语言:javascript
复制
Y     M   
2019  1  1    A
         2    E
         3    H
2020  2  1    B
         2    F
         3    I
2021  3  1    C
         2    G
         3    J
dtype: object

可以将名称添加到列中。

代码语言:javascript
复制
df.index.set_names(['Y', 'M', 'D'], inplace=True)
代码语言:javascript
复制
Y     M  D
2019  1  1    A
         2    E
         3    H
2020  2  1    B
         2    F
         3    I
2021  3  1    C
         2    G
         3    J
dtype: object

重置索引以获得正常列

代码语言:javascript
复制
df = df.reset_index()
代码语言:javascript
复制
      Y  M  D  0
0  2019  1  1  A
1  2019  1  2  E
2  2019  1  3  H
3  2020  2  1  B
4  2020  2  2  F
5  2020  2  3  I
6  2021  3  1  C
7  2021  3  2  G
8  2021  3  3  J

用日期创建列

代码语言:javascript
复制
df['date'] = df.apply(lambda row: "{}/{}/{}".format(row['D'], row['M'], row['Y']), axis=1)
代码语言:javascript
复制
      Y  M  D  0      date
0  2019  1  1  A  1/1/2019
1  2019  1  2  E  2/1/2019
2  2019  1  3  H  3/1/2019
3  2020  2  1  B  1/2/2020
4  2020  2  2  F  2/2/2020
5  2020  2  3  I  3/2/2020
6  2021  3  1  C  1/3/2021
7  2021  3  2  G  2/3/2021
8  2021  3  3  J  3/3/2021

您可以删除yearmonthday

代码语言:javascript
复制
df.drop(['Y', 'M','D'], axis=1, inplace=True)
代码语言:javascript
复制
   0      date
0  A  1/1/2019
1  E  2/1/2019
2  H  3/1/2019
3  B  1/2/2020
4  F  2/2/2020
5  I  3/2/2020
6  C  1/3/2021
7  G  2/3/2021
8  J  3/3/2021

还可以重命名列。

代码语言:javascript
复制
df.rename(columns={0:'value'}, inplace=True)
代码语言:javascript
复制
  value      date
0     A  1/1/2019
1     E  2/1/2019
2     H  3/1/2019
3     B  1/2/2020
4     F  2/2/2020
5     I  3/2/2020
6     C  1/3/2021
7     G  2/3/2021
8     J  3/3/2021

并且可以更改列的顺序。

代码语言:javascript
复制
df = df[['date', 'value']]
代码语言:javascript
复制
       date value
0  1/1/2019     A
1  2/1/2019     E
2  3/1/2019     H
3  1/2/2020     B
4  2/2/2020     F
5  3/2/2020     I
6  1/3/2021     C
7  2/3/2021     G
8  3/3/2021     J

最小工作码

代码语言:javascript
复制
import pandas as pd

data = {
    'Y': [2019, 2020, 2021], 
    'M': [1,2,3], 
    '1': ['A','B','C'],
    '2': ['E','F','G'],
    '3': ['H','I','J'],
}

df = pd.DataFrame(data)
print(df)

df = df.set_index(['Y','M'])
print(df)

df = df.stack()
print(df)

df.index.set_names(['Y', 'M', 'D'], inplace=True)
print(df)

df = df.reset_index()
print(df)

df['date'] = df.apply(lambda row: "{}/{}/{}".format(row['D'], row['M'], row['Y']), axis=1)
print(df)

df.drop(['Y', 'M','D'], axis=1, inplace=True)
print(df)

df.rename(columns={0:'value'}, inplace=True)
print(df)

df = df[['date', 'value']]
print(df)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68799478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档