无法使用熊猫从列表中提取值

时间:2019-07-01 17:23:00

标签: python pandas

我有一个类似下面的数据集

data = [("patient 1", 0.44), ("patient 2", 0.14), ("patient 3", 0.22)]

因此,我需要创建每个元组的第一个值的列表。这就是我要做的

df = pd.DataFrame(np.array(data))
values = df.iloc[:, 0].unique() 

所以我得到一个预期的列表,如下所示

['patient 1', 'patient 2', 'patient 3']

但是有时我的数据集可能缺少一些值。所以也许像这样

data = [("patient 1", 0.44), ("patient 2", 0.14), ("patient 3",)]

如您所见,patient 3的值为空或无。因此,当我再次运行上面的程序时,我没有得到每个元组的第一个值的列表,而是得到了原来的列表

[('patient 1', 0.44), ('patient 2', 0.14), ('patient 3',)]

我如何确保尽管数据不完整,但由于我只想要每个元组的第一个值,所以我得到了想要的列表?

注意:我知道我可以使用简单的python提取第一个值,但是由于数据集可能非常大,我想坚持使用Pandas来获取结果。

2 个答案:

答案 0 :(得分:1)

您可以清除数据。这是一个如何做的例子:

data = [("patient 1", 0.44), ("patient 2", 0.14), ("patient 3",)]

# We check if there are two values in the tuple otherwise we discard it
cleaned_data = [(x[0], x[1]) for x in data if len(x)>1]

df = pd.DataFrame(np.array(cleaned_data ))
values = df.iloc[:, 0].unique() 

输出:

array(['patient 1', 'patient 2'], dtype=object)

答案 1 :(得分:0)

我建议:

import time
from time import sleep
import sys

def printfast(str):
    for letter in str:
        sys.stdout.write(letter)
        sys.stdout.flush()
        time.sleep(0.04)

name = input("\nWhat is your name?\n\n")

printfast(f("You are the mighty hero {name}. In front of you, there is a grand palace, containing twisting marble spires and spiraling dungeons.\n")

希望这会有所帮助。