有没有一种方法可以将pandas dataframe信息 - df.info()导出到Excel文件中?

9
我有一个本地的.csv文件。我使用pandas读取文件。我想将df.info()的结果移动到Excel中。看起来df.info().to_excel不起作用,因为它不被支持。有没有什么办法可以做到这一点?
我尝试过df.info().to_excel。
import pandas as pd
from openpyxl.workbook import Workbook
pd.read_csv("file.csv",sep='|', error_bad_lines=False)
writer = pd.ExcelWriter('output.xlsx')
df.info()
df.info().to_excel(writer,sheet_name='info')

我希望将数据框信息输出到Excel的单个选项卡中。


df.info()返回None。您可能会对关键字buf感兴趣,请参见此处的文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.info.html - rahlf23
5个回答

13

对我来说最简单的方法是将相同的信息分别存储在数据框中:

df_datatypes = pd.DataFrame(df.dtypes)
df_null_count = df.count()

然后像往常一样将其写入Excel。


4
pd.concat([pd.DataFrame(df.dtypes), df.count()], axis=1).to_excel("info.xlsx") - Nicolas

3
“to_excel”是DataFrame的方法,详见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html。而“DataFrame.info()”不会返回一个DataFrame。
你可以像下面这样将信息写入文本文件:
import io
buffer = io.StringIO()
df.info(buf=buffer)
s = buffer.getvalue()
with open("df_info.txt", "w", encoding="utf-8") as f:
    f.write(s)

您可以通过删除最后两行并解析变量s,创建一个DataFrame(按照您想要在Excel文件中出现的方式),然后使用to_excel()方法来修改此代码。

2

你可以在Python 3中完成这个任务。

pd.DataFrame({"name": train.columns, "non-nulls": len(train)-train.isnull().sum().values, "nulls": train.isnull().sum().values, "type": train.dtypes.values}).to_excel("op.xlsx")

+1百万给这个答案!谢谢!我终于明白了!我在最后删除了"to_excel()"进行测试,发现".values"是关键,可以去掉我无法控制的最左边的无标题列名列。现在我可以完全控制输出的样式了。一行搞定,不需要额外的导入或繁琐的步骤!满分! - undefined

1

我同意 @yl_low 的看法,但是你可以采用更优雅的解决方案,如下所示:

def get_dataframe_info(df):
    """
    input
       df -> DataFrame
    output
       df_null_counts -> DataFrame Info (sorted)
    """

    df_types = pd.DataFrame(df.dtypes)
    df_nulls = df.count()
    
    df_null_count = pd.concat([df_types, df_nulls], axis=1)
    df_null_count = df_null_count.reset_index()
    
    # Reassign column names
    col_names = ["features", "types", "non_null_counts"]
    df_null_count.columns = col_names
    
    # Add this to sort
    df_null_count = df_null_count.sort_values(by=["null_counts"], ascending=False)
    
    return df_null_count

0

只需一行代码(不含非空列);

df.dtypes.reset_index(name='Dtype').rename(columns={'index' :  'Column'}).to_excel(pd.ExcelWriter('Name.xlsx'), 'info')

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