我想从CSV文件中捕获多个单元格值并将其写入新列

时间:2018-10-17 20:05:59

标签: python database pandas csv

因此,我是Python的新手。我一直在尝试将我学到的东西应用于现实世界中的问题。我为自己设定的任务是这样。

我想捕获两个单元格值'01 / 01/2018和'08 / 01/2018'并将它们打印到标题值日期下的新csv.file中。我还想创建一个新列,该列显示原始csv文件中与该日期关联的值。

我们将不胜感激,或者将其指向正确的方向。

原始表

Hierarchy   | Dept   | Emp | Alpha | Bravo | Charlie | 01/01/2018 | 08/01/2018|
Hierarchy 1 | Dept 1 | JC  | h     | o     | l       | 0          | 2         |

新表格

Hierarchy   |Dept   | Emp | Alpha | Bravo | Charlie    | Date       |Value |
Hierarchy 1 |Dept 1 | JC  | h     | o     | l          | 01/01/2018 | 0    |
Hierarchy 1 |Dept 1 | JC  | h     | o     | l          | 08/01/2018 | 2    |

3 个答案:

答案 0 :(得分:0)

正如@ChristianSloper在评论中提到的,pd.melt是为此目的而设计的。就您而言,这是单线的:

df
     Hierarchy    Dept Emp Alpha Bravo Charlie  01/01/2018  08/01/2018
0  Hierarchy_1  Dept_1  JC     h     o       l           0           2

pd.melt(df, 
        id_vars=df.columns[:-2], 
        value_vars=df.columns[-2:],
        var_name='Date', 
        value_name='Value')
     Hierarchy    Dept Emp Alpha Bravo Charlie        Date  Value
0  Hierarchy_1  Dept_1  JC     h     o       l  01/01/2018      0
1  Hierarchy_1  Dept_1  JC     h     o       l  08/01/2018      2

答案 1 :(得分:0)

好吧, 我只是继续假设您的表存储在一个csv文件中。因此,我们将从以下内容开始阅读:

import pandas as pd

df = pd.read_csv('mytable.csv',sep='|')
pd.melt(df, 
       id_vars = ['Hierarchy   ', ' Dept   ', ' Emp ', ' Alpha ', ' Bravo ', ' Charlie '],
       value_vars=[' 01/01/2018 ',' 08/01/2018' ],
       var_name='Date', 
       value_name='Value')

给出理想的结果。

答案 2 :(得分:0)

在贡献者的帮助下,我完成了任务,下面是我使用的代码! 感谢社区提供的帮助!

"""
Transforms Data into Desired Format
"""

#import pandas module
import pandas as pd

#create variable where df = to data.csv
df = pd.read_csv('data.csv')

#create new variable for df.columns
cols = df.columns
#use .melt() function to complete data manipulation
transformed_df = pd.melt(df,
                         id_vars=cols[:6],
                         value_vars=cols[6:])

#Assert Data has been formatted correctly
print(transformed_df)

#create new csv file with new data
transformed_df.to_csv('melted_data.csv')

print("\nData has been Melted!")