将Pandas Dataframe 中的最后一个非空行写入CSV?

xytpbqjk  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(238)

这将写入所有记录,包括空的PbRatio。我只想写入最后一个非空的记录。当我添加df[df.asOfDate == df.asOfDate.max()].to_csv时,它会得到最后一个记录,它总是空的。

import pandas as pd
from yahooquery import Ticker
symbols = ['AAPL','GOOG','MSFT','NVDA']
header = ["asOfDate","PbRatio"]
           
for tick in symbols:
    faang = Ticker(tick)
    faang.valuation_measures
    df = faang.valuation_measures
    try:
        for column_name in header :
            if column_name  not in df.columns:
                df.loc[:,column_name  ] = None
        df.to_csv('output.csv', mode='a', index=True, header=False, columns=header)
    except AttributeError:
        continue

电流输出:

预期输出:

sr4lhrrt

sr4lhrrt1#

这应该可以,只需要过滤df中的not Nan值和max asOfDate

for tick in symbols:
    faang = Ticker(tick)
    faang.valuation_measures
    df = faang.valuation_measures
    try:
        for column_name in header :
            if column_name  not in df.columns:
                df.loc[:,column_name  ] = None
    except AttributeError:
        continue

    # filter for notna
    df = df[df['PbRatio'].notna()]
   
    # filter for max date
    df = df[df['asOfDate'] == df['asOfDate'].max()]
    df.to_csv('output.csv', mode='a', index=True, header=False, columns=header)
odopli94

odopli942#

这里我创建了一个虚拟数据来处理,如果你提供数据就更好了。

df = pd.DataFrame([['A',12,123],['A',13,125],['A',2,None],['B',16,133],
['B',16,None],['B',14,139]], columns=['Name','id','score'])
Name    id  score
0   A   12  123.0
1   A   13  125.0
2   A   2   NaN
3   B   16  133.0
4   B   16  NaN
5   B   14  139.0

然后删除缺少值的行

df = df.dropna(how = 'any')

这看起来像这样:

Name    id  score
0   A   12  123.0
1   A   13  125.0
3   B   16  133.0
5   B   14  139.0

我得到一组唯一名称,这是您拥有的任何"AAPL "/" NVDA"列

names = set(df['Name'])

创建一个新的 Dataframe ,在其中我只获取每个唯一名称的最后一行,在我的示例中是"A"和"B"。在您的示例中应该是"AAPL "/" NVDA"。

new_df = pd.DataFrame(columns=df.columns)
for n in names:
    new_df.loc[new_df.shape[0]] = df.loc[df.query(f"Name== '{n}'").index[-1]]

这看起来应该像

new_df
>>>

    Name    id  score
0   B   14  139.0
1   A   13  125.0

相关问题