【问题标题】:Converting some columns from pandas dataframe to list of lists将熊猫数据框中的一些列转换为列表列表
【发布时间】:2015-07-07 13:56:51
【问题描述】:

我有一个dataframe。我希望将一些数据转换为列表列表。我感兴趣的列是indexNameBirths。我的代码有效,但似乎效率低下,并且由于某种原因,字母 L 被添加到每个索引的末尾。

我的代码:

import pandas as pd


data = [['Bob', 968, 'Male'], ['Jessica', 341, 'Female'], ['Mary', 77, 'Female'], ['John', 578, 'Male'], ['Mel', 434, 'Female']]
headers = ['Names', 'Births', 'Gender']
df = pd.DataFrame(data = data, columns=headers)
indexes = df.index.values.tolist()
mylist =  [[x] for x in indexes]

for x in mylist:
    x.extend([df.ix[x[0],'Names'], df.ix[x[0],'Births']])

print mylist

期望的输出:

[[0, 'Bob', 968], [1, 'Jessica', 341], [2, 'Mary', 77], [3, 'John', 578], [4, 'Mel', 434]]

【问题讨论】:

  • 我刚刚使用 python 2.7.9 和 pandas 0.16.2 运行了你的代码,输出正是你想要的。
  • @JulienGrenier。是的,我正在寻找代码的效率改进。此外,tolist() 功能似乎在末尾添加了一个 L,因此实际输出为:[[0L, 'Bob', 968], [1L, 'Jessica', 341], [2L, 'Mary', 77], [3L, 'John', 578], [4L, 'Mel', 434]]
  • 我也很想看到这个问题的解决方案...

标签: python python-2.7 pandas


【解决方案1】:

为什么不直接使用您提到的.values.tolist()

import pandas as pd

# your data
# =================================================
data = [['Bob', 968, 'Male'], ['Jessica', 341, 'Female'], ['Mary', 77, 'Female'], ['John', 578, 'Male'], ['Mel', 434, 'Female']]
headers = ['Names', 'Births', 'Gender']
df = pd.DataFrame(data = data, columns=headers)

# nested list
# ============================
df.reset_index()[['index', 'Names', 'Births']].values.tolist()

Out[46]: 
[[0, 'Bob', 968],
 [1, 'Jessica', 341],
 [2, 'Mary', 77],
 [3, 'John', 578],
 [4, 'Mel', 434]]

【讨论】:

  • 这输出:[[0L, 'Bob', 968L], [1L, 'Jessica', 341L], [2L, 'Mary', 77L], [3L, 'John', 578L], [4L, 'Mel', 434L]]。为什么要添加 L?
  • @user2242044 L 表示“长”整数。我没有看到我的输出附加了“L”。让我想想可能的原因。
  • 还有drop()的反函数比如include?例如,假设我的数据框有 40 列,我想要其中的两列。
  • @user2242044:首先,我的外壳中没有看到 L。此外,L 仅表示那些是长整数而不是整数。
  • @user2242044 你能试试这个df.reset_index()[['index', 'Names', 'Births']].values.astype(str).tolist()吗?它仍然会产生带有L 的东西吗?
【解决方案2】:

好的,这行得通(基于李建勋的回答和cmets):

import pandas as pd

# Data
data = [['Bob', 968, 'Male'], ['Jessica', 341, 'Female'], ['Mary', 77, 'Female'], ['John', 578, 'Male'], ['Mel', 434, 'Female']]
headers = ['Names', 'Births', 'Gender']
df = pd.DataFrame(data = data, columns=headers)

# Output
print df.reset_index()[['index', 'Names', 'Births']].values.astype(str).tolist()

谢谢李建勋,这对我也有帮助:-)

一般来说,可以使用以下方法将完整的数据框转换为列表列表(这是我需要的):

df.values.astype(str).tolist()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2016-09-25
    • 2017-08-26
    • 2022-01-19
    • 1970-01-01
    • 2023-03-14
    • 2018-08-25
    相关资源
    最近更新 更多