我有一个包含列#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'
答案 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