python-3.x 将2D列表转换为2个数据框列Pandas

bybem2ql  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(94)

我尝试了以下方法,并得到了错误:

>>> import pandas as pd
>>> df = pd.DataFrame([[0,0],[2,2]])
>>> df
   0  1
0  0  0
1  2  2
>>> y = [[0,0],[2,2],[3,3]]
>>> df["s","d"] = y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 3119, in __setitem__
    self._set_item(key, value)
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 3194, in _set_item
    value = self._sanitize_column(key, value)
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 3391, in _sanitize_column
    value = _sanitize_index(value, self.index, copy=False)
  File "C:\Python35\lib\site-packages\pandas\core\series.py", line 4001, in _sanitize_index
    raise ValueError('Length of values does not match length of ' 'index')
ValueError: Length of values does not match length of index
>>> df[["s","d"]] = y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 3116, in __setitem__
    self._setitem_array(key, value)
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 3142, in _setitem_array
    indexer = self.loc._convert_to_indexer(key, axis=1)
  File "C:\Python35\lib\site-packages\pandas\core\indexing.py", line 1327, in _convert_to_indexer
    .format(mask=objarr[mask]))
KeyError: "['s' 'd'] not in index"

字符串
让我知道我如何可以创建2列与二维数组同时进行。

ghg1uchk

ghg1uchk1#

使用DataFrame构造函数并赋值给嵌套列表:

df = pd.DataFrame([[0,0],[2,2]])

y = [[0,0],[2,2]]

df[["s","d"]] = pd.DataFrame(y)
print (df)
   0  1  s  d
0  0  0  0  0
1  2  2  2  2

字符串
另一种解决方案是创建新的DataFramejoin到原始:

df = df.join(pd.DataFrame(y, columns=['s','d'], index=df.index))


如果您想添加多个列:

df = pd.DataFrame([[0,0],[2,2]])

y = [[0,0],[2,2],[3,3]]

df[["s","d","e"]] = pd.DataFrame(np.array(y).T)
print (df)
   0  1  s  d  e
0  0  0  0  2  3
1  2  2  0  2  3

z = [[0,0,3],[2,2,3]]
df[["s","d","e"]] = pd.DataFrame(z)
print (df)
   0  1  s  d  e
0  0  0  0  0  3
1  2  2  2  2  3


如果需要追加2个新列到3行DataFrame:

df = pd.DataFrame([[0,0],[2,2],[4,4]])

y = [[0,0],[2,2],[3,3]]

df[["s","d"]] = pd.DataFrame(y)
print (df)

   0  1  s  d
0  0  0  0  0
1  2  2  2  2
2  4  4  3  3


否则获取缺失值:

df = pd.DataFrame([[0,0],[2,2]])

y = [[0,0],[2,2],[3,3]]

df = df.join(pd.DataFrame(y, columns=['s','d']), how='outer')
print (df)
     0    1  s  d
0  0.0  0.0  0  0
1  2.0  2.0  2  2
2  NaN  NaN  3  3

1qczuiv0

1qczuiv02#

你不能在尝试的时候直接这样做,但这是一个工作:

import pandas as pd

df = pd.DataFrame([[0,0],[2,2]])

y = [[0,0],[2,2]]

df["s"], df["d"] = [i[0] for i in y], [i[1] for i in y]

字符串
你有几个问题,其中之一是df['s', 'd']是不正确的索引,你需要df[['s', 'd']]-但你也不能直接从列表分配给它。
你也不能分配任何比索引更长的东西,所以你的y = [[0,0],[2,2],[3,3]]太长了。

相关问题