Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pandas中将列表转换为数据帧并将其重塑为数据帧_Python_Pandas - Fatal编程技术网

Python 在Pandas中将列表转换为数据帧并将其重塑为数据帧

Python 在Pandas中将列表转换为数据帧并将其重塑为数据帧,python,pandas,Python,Pandas,如何将列表(x)转换为10x3数据帧?我想使用列表中的前3个条目作为列名。接下来的三个条目进入第1行,之后的三个条目进入第2行,依此类推。换句话说,我的数据框架将是3列,其中包含这三个名称“阶段”、“公式”、“Sat Indx”。那么第1行条目将是方解石、CaCO3、.8409 我尝试了以下操作,但出现错误: z=DataFrame(x, columns=['Phase','Formula','Sat Indx']) print(x) [u'Phase ', u'Form

如何将列表(x)转换为10x3数据帧?我想使用列表中的前3个条目作为列名。接下来的三个条目进入第1行,之后的三个条目进入第2行,依此类推。换句话说,我的数据框架将是3列,其中包含这三个名称“阶段”、“公式”、“Sat Indx”。那么第1行条目将是方解石、CaCO3、.8409

我尝试了以下操作,但出现错误:

z=DataFrame(x, columns=['Phase','Formula','Sat Indx'])

print(x)

[u'Phase          ',
 u'Formula        ',
 u'Sat Indx',
 u'Calcite        ',
 u'CaCO3          ',
 0.8409314786906652,
 u'Aragonite      ',
 u'CaCO3          ',
 0.6971616312984299,
 u'H2O(g)         ',
 u'H2O            ',
 -1.5101143330253721,
 u'CO2(g)         ',
 u'CO2            ',
 -1.5522870578743806,
 u'Gypsum         ',
 u'CaSO4:2H2O     ',
 -2.993649142404755,
 u'Anhydrite      ',
 u'CaSO4          ',
 -3.2135284668446644,
 u'Portlandite    ',
 u'Ca(OH)2        ',
 -10.738067251525967,
 u'H2(g)          ',
 u'H2             ',
 -22.6,
 u'O2(g)          ',
 u'O2             ',
 -37.98786977495807,
 u'CH4(g)         ',
 u'CH4            ',
 -66.16971681191183]

您应该首先将列表转换为更合适的格式

一个选项是将其转换为具有列表理解的子列表(每行一个子列表):

In [10]: x_sublists = [x[i:i+3] for i in range(0, len(x), 3)]

In [11]: pd.DataFrame(x_sublists [1:], columns=x_sublists [0])
Out[11]: 
   Phase            Formula                Sat Indx
0  Calcite          CaCO3            0.840931478691
1  Aragonite        CaCO3            0.697161631298
2  H2O(g)           H2O              -1.51011433303
3  CO2(g)           CO2              -1.55228705787
4  Gypsum           CaSO4:2H2O        -2.9936491424
5  Anhydrite        CaSO4            -3.21352846684
6  Portlandite      Ca(OH)2          -10.7380672515
7  H2(g)            H2                        -22.6
8  O2(g)            O2                -37.987869775
9  CH4(g)           CH4              -66.1697168119
另一个选项是将列表重塑为numpy数组(但这有一个缺点,即导致列具有@DSM所述的对象dtype,因此要得到与上述相同的结果,应手动将该列设置为float):


不过,这将使
Sat的元素成为Indx
字符串。我考虑过使用
dtype=object
来避免这种情况,例如
df2=pd.DataFrame(np.array(x[3:],dtype=object)。重塑(-1,3),columns=x[:3])
或其他什么,但是即使现在的数字是浮点数,仍然有一个带有object dtype的列,而浮点数型会更好。是的,谢谢你的评论!我没想到。使用元组方法,它是浮动的。很容易从
dtype=object
转换为
float
z['Sat Indx']=z['Sat Indx'].astype(float)
@Happy001:是的,但是如果我们用
read\u csv
的方式强制它,那就好了。
In [67]: x_reshaped = np.array(x[3:], dtype=object).reshape((-1, 3))

In [68]: df = pd.DataFrame(x_reshaped, columns=x[:3])

In [69]: df['Sat Indx'] = df['Sat Indx'].astype(float)