从Pandas的数据框或序列输出中删除名称和dtype信息。

55

我有一个类似这样的输出文件,是从pandas函数中得来的。

Series([], name: column, dtype: object)
311     race
317     gender
Name: column, dtype: object
我试图只获取第二列的输出,即

后面的内容。
race
gender

通过删除顶部和底部行、第一列来实现。我该如何操作?

3个回答

49

DataFrame/Series.to_string

这些方法具有各种参数,允许您在打印时配置显示的信息以及如何显示。默认情况下,Series.to_stringname=Falsedtype=False,因此我们还需要指定 index=False

s = pd.Series(['race', 'gender'], index=[311, 317])

print(s.to_string(index=False))
#   race
# gender

如果索引很重要,则默认为 index=True

print(s.to_string())
#311      race
#317    gender

Series.str.cat

当您不关心索引,只想要左对齐的值使用'\n'进行拼接。如果需要,首先进行字符串转换。


#s = s.astype(str)

print(s.str.cat(sep='\n'))
#race
#gender

1
我喜欢这种明确的方式,但它在我的字符串开头留下了空格。在我的情况下,我可以使用 strip() 去掉它,但如果你的数据框元素实际上以空格开头,那可能是危险的。 - craq
1
@craq 很好的观点。索引的默认左对齐和值的右对齐使得如果您不需要索引,使用 to_string 方法获得正确的对齐非常困难。相反,Series.str.cat 是最佳解决方案,因为它将保留初始空格(如果有的话)。 - ALollz
我建议您添加 to_string(),它允许更精细的控制名称、索引、标题、长度、数据类型、浮点格式和 na_rep、最大行数和最小行数。 - smci

31

你只需要使用.values属性:

In [159]:

s = pd.Series(['race','gender'],index=[311,317])
s
Out[159]:
311      race
317    gender
dtype: object
In [162]:

s.values
Out[162]:
array(['race', 'gender'], dtype=object)

您可以将其转换为列表或访问每个值:

In [163]:

list(s)
Out[163]:
['race', 'gender']

In [164]:

for val in s:
    print(val)
race
gender

5
to_string 答案相比,这是一种黑客方式。 - ijoseph
to_string()相比,这只是一个hack,to_string()允许更精细的控制名称、索引、标题、长度、dtype、float_format和na_rep、max_rows和min_rows。 - smci

3
有时候我会这样写:print(*s, sep='\n'):
s = pd.Series(['race', 'gender'], index=[311, 317])
print(*s, sep='\n')

提供

race
gender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接