Python 如何在没有索引的情况下打印数据帧
我想打印整个数据帧,但不想打印索引 另外,有一列是datetime类型,我只想打印时间,而不是日期 数据帧看起来像:Python 如何在没有索引的情况下打印数据帧,python,datetime,pandas,dataframe,Python,Datetime,Pandas,Dataframe,我想打印整个数据帧,但不想打印索引 另外,有一列是datetime类型,我只想打印时间,而不是日期 数据帧看起来像: User ID Enter Time Activity Number 0 123 2014-07-08 00:09:00 1411 1 123 2014-07-08 00:18:00 893 2 123 2014-07-08 00:49:00
User ID Enter Time Activity Number
0 123 2014-07-08 00:09:00 1411
1 123 2014-07-08 00:18:00 893
2 123 2014-07-08 00:49:00 1041
我想把它打印出来
User ID Enter Time Activity Number
123 00:09:00 1411
123 00:18:00 893
123 00:49:00 1041
或者可能:
print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
python 2.7
将df.打印到字符串(index=False)
python 3
打印(df.to_字符串(index=False))
如果您只想打印字符串/json,可以通过以下方法解决:
打印(df.to_字符串(index=False))
Buf如果您也想序列化数据,甚至想发送到MongoDB,最好执行以下操作:
document=df.to_dict(orient='list')
现在有6种方法可以确定数据的方向,在中选择更适合您的方法。要回答“如何打印无索引的数据帧”问题,您可以将索引设置为空字符串数组(数据帧中每行一个),如下所示:
blankIndex=[''] * len(df)
df.index=blankIndex
如果我们使用您帖子中的数据:
row1 = (123, '2014-07-08 00:09:00', 1411)
row2 = (123, '2014-07-08 00:49:00', 1041)
row3 = (123, '2014-07-08 00:09:00', 1411)
data = [row1, row2, row3]
#set up dataframe
df = pd.DataFrame(data, columns=('User ID', 'Enter Time', 'Activity Number'))
print(df)
通常打印为:
User ID Enter Time Activity Number
0 123 2014-07-08 00:09:00 1411
1 123 2014-07-08 00:49:00 1041
2 123 2014-07-08 00:09:00 1411
通过创建一个数组,该数组中的空字符串数量与数据框中的行数量相同:
blankIndex=[''] * len(df)
df.index=blankIndex
print(df)
它将从输出中删除索引:
User ID Enter Time Activity Number
123 2014-07-08 00:09:00 1411
123 2014-07-08 00:49:00 1041
123 2014-07-08 00:09:00 1411
在Jupyter中,笔记本电脑将按照以下屏幕截图进行渲染:
如果您想漂亮地打印数据帧,那么可以使用package 具体来说,
showindex=False
,顾名思义,允许您不显示索引。输出如下所示:
+--------+--------+--------+
| col1 | col2 | col3 |
|--------+--------+--------|
| 15 | 76 | 5175 |
| 30 | 97 | 3331 |
| 34 | 56 | 3513 |
| 50 | 65 | 203 |
| 84 | 75 | 7559 |
| 41 | 82 | 939 |
| 78 | 59 | 4971 |
| 98 | 99 | 167 |
| 81 | 99 | 6527 |
| 17 | 94 | 4267 |
+--------+--------+--------+
打印时,下面的行将隐藏DataFrame的索引列
df.style.hide_index()
更新:tested w Python 3.7与上面使用df.to_字符串(index=False)的许多答案类似,我经常发现有必要提取一列值,在这种情况下,您可以使用以下命令使用.to_字符串指定单个列:
data = pd.DataFrame({'col1': np.random.randint(0, 100, 10),
'col2': np.random.randint(50, 100, 10),
'col3': np.random.randint(10, 10000, 10)})
print(data.to_string(columns=['col1'], index=False)
print(data.to_string(columns=['col1', 'col2'], index=False))
它提供了一个易于复制(且无索引)的输出,可用于粘贴到其他位置(Excel)。样本输出:
col1 col2
49 62
97 97
87 94
85 61
18 55
要保留“漂亮打印”,请使用
任何使用Jupyter笔记本打印数据帧而不使用索引列的人,这对我来说都很有用:
display(table.hide_index())
摘自kingmakerking的答案:
当您将单元格更改为标记时,Jupyter notebook可以将GFM标记表语法转换为表
因此,将tablefmt改为'github'而不是'psql',然后进行复制和粘贴
print(tabulate(dframe, headers='keys', tablefmt='github', showindex=False))
(Python 3)
您使用的术语(“数据帧”、“索引”)让我觉得您实际上是在使用R,而不是Python。请澄清。无论如何,我们需要查看打印此“数据帧”的现有代码,以便有机会提供帮助。请阅读并按照以下说明操作。。。我会说,如果这实际上是Python,并且第二列中的对象是
datetime.datetime
对象,那么您可以使用该方法,使用适当的格式字符串(可能是%H:%M:%S”
)打印时间。@Zack:DataFrame
是pandas
中的二维数据结构的名称,一个流行的Python数据分析库。这很好,但是它不再包含sep选项卡,这在复制到时是一个障碍excel@Rockbar如果您想复制/导出到excel,您应该使用df.to_csv
。对于我来说,列标签显示出来时与数据不对齐(开始处缺少空格)。可能是因为我的数据比列标签占用更多的字符。添加参数justify='left'可以修复此问题,但显然会更改列标签的对齐方式。您也可以使用df.to_clipboard()
,然后粘贴到Excel中。用于处理Windows愚蠢的“无法编辑打开的文档”BS.df.to\u excel('filename.xlsx',index=False)
这怎么可能,因为DataFrame.to\u csv没有返回值?我没有打印出来。事实上,OP要求打印。此注释不会打印数据框,而是将其保存为CSV。需要jinja2软件包,并且不会使用Python 3.7生成所需的输出。我发现在制作报告时,将此答案复制/粘贴到表中最有效,谢谢!我最喜欢这个答案-使用Python 3.8生成正确的输出,并且无需打印数据帧(对于Jupyter笔记本/实验室应用程序很有用),尽管有点奇怪,但这是IMO的最佳解决方案。这真的是最好的现代解决方案吗?这非常完美,谢谢。笔记本中仍然显示一个清晰的数据框,没有索引列。这正是我想要的。仅供参考,HTML不会显示在REPL输出中
col1 col2
49 62
97 97
87 94
85 61
18 55
from IPython.display import HTML
HTML(df.to_html(index=False))
print(tabulate(dframe, headers='keys', tablefmt='github', showindex=False))