我正在使用熊猫来操纵我的文件(其中每一行都有一个名称,因为行名不是单独的列,而列也有名称)并执行下游分析。在此过程中,我必须使用numpy
将值转换为对数,然后再次将numpy
数组转换为熊猫dataframe
。但是在此过程中,我将同时删除列名和行名。
这是我所做的:
df = pd.read_table(infile, index_col=0)
df2 = np.log2(np.array(df))
df3 = pd.DataFrame(df2)
将列名添加到熊猫dataframe
中,我使用了以下代码:
colname = list(df.columns)
df3.columns = colname
但是我没有设法将行名添加到新的dataframe
中。你知道怎么做吗?
这是输入数据(df):
ABC20190124 ABC20190156
CCNO 61.300048 1.865438
MYC 7949.585246 2229.654372
CD79A 0.954767 1223.411451
这是我得到的输出(df3):
0 1
0 5.9378 0.8995
1 12.9566 11.1226
2 -0.0667 10.2566
这是预期的输出:
ABC20190124 ABC20190156
CCNO5.9378 0.8995
MYC 12.9566 11.1226
CD79A -0.0667 10.2566
答案 0 :(得分:1)
我认为这里没有必要转换为numpy数组,仅适用于df
:
df = pd.read_table(infile, index_col=0)
df3 = np.log2(df)
您的解决方案应使用index
构造函数中的columns
和DataFrame
参数进行更改:
df = pd.read_table(infile, index_col=0)
df2 = np.log2(np.array(df))
df3 = pd.DataFrame(df2, index=df.index, columns=df.columns)
示例:
df = pd.DataFrame({'A':[4,5,4], 'B':[7,8,9]})
df3 = np.log2(df)
print (df3)
A B
0 2.000000 2.807355
1 2.321928 3.000000
2 2.000000 3.169925