熊猫:阅读单独的Year&amp ;;的CSV文件月份列,合并它们并设置为索引列

时间:2017-12-14 19:40:06

标签: python pandas datetime datetime-format datetime-conversion

我有一个包含列#define intiatePort(portSize) { \ Port##portSize##Bit::Port##portSize##Bit(){ \ } \ \ void Port##portSize##Bit::Write(uint##portSize##_t data){ \ \ //write data } \ uint##portSize##_t Port##portSize##Bit::Read(){ \ uint##portSize##_t result; \ \ //read data return result; \ } 的csv文件(类型:int64),例如1958年,列'Year'(类型:int64),例如7月7日。

我想将这两列转换为一列(格式应为'YYYY-MM')并将其设置为索引列。 到目前为止,我试过这个:

'Month'

2 个答案:

答案 0 :(得分:1)

由于您请求的格式(%Y-%M)不是日期时间表示,您可以简单地跳过解析日期并执行此操作:

import pandas as pd

temp=u'''\
Year,Month,Col
1958,7,2
1991,6,4'''

# Read sample dataframe
df = pd.read_csv(pd.compat.StringIO(temp), sep=',')

# Set index
df = (df.set_index(df.Year.astype(str)+"-"+df.Month.astype(str).str.zfill(2))
      .drop(['Month','Year'],axis=1))

print(df)

打印:

         Col
1958-07    2
1991-06    4

另一种方法是:

df = pd.read_csv(pd.compat.StringIO(temp), 
                 parse_dates=[['Year','Month']],  
                 index_col="Year_Month")

df.index = df.index.strftime("%Y-%m")

答案 1 :(得分:0)

首先,如果需要Datetimeindex需要index_col设置Year_Month

import pandas as pd
from pandas.compat import StringIO

temp=u"""Year,Month,Col
1958,7,2
1991,6,4"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 parse_dates=[['Year','Month']],  
                 index_col="Year_Month")

print (df)
            Col
Year_Month     
1958-07-01    2
1991-06-01    4

print (df.index)

DatetimeIndex(['1958-07-01', '1991-06-01'], 
              dtype='datetime64[ns]', 
              name='Year_Month', freq=None)

编辑:

如果需要字符串索引(YYYY-MM),则首先使用两列创建MultiIndex,然后join创建list comprehension

import pandas as pd
from pandas.compat import StringIO

temp=u"""Year,Month,Col
1958,7,2
1991,6,4"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 index_col=['Year','Month'])

print (df)
            Col
Year Month     
1958 7        2
1991 6        4

df.index = ['{}-{:02d}'.format(i,j) for i,j in df.index]
print (df)
         Col
1958-07    2
1991-06    4