Как сохранить имена столбцов во фрейме данных, когда я пытаюсь удалить все строки, которые не начинаются с определенных имен?

Мне нужно удалить большинство компаний из исторических данных фондового рынка в формате CSV. Единственные компании, которые я хочу сохранить, это «GOOG», «AAPL», «AMZN», «NFLX». Обратите внимание, что в CSV перечислены более 20 000 компаний. Я также хочу отфильтровать эти компании, используя только определенные столбцы в CSV. Столбцы: «тикер», «дата», «активы», «eps», «pe», «цена», «доход».

Код для фильтрации этих компаний:

list = ['GOOG', 'AAPL', 'AMZN', 'NFLX']

for tickers in list:
    df1 = df[df.ticker == tickers]
    df1.to_csv("20CompanyAnalysisData1.csv", mode='a', header=False)

    continue

Этот код успешно может записывать в новый CSV только те столбцы, которые мне нужны, и перечислять только данные компаний, которые мне нужны.

Проблема: новый CSV не печатается с именами столбцов, что делает его действительно запутанным, чтобы идти и перечислять их вручную, особенно когда я буду добавлять больше столбцов данных.

Пример CSV, из которого я читаю (со столбцами данных):

ticker,dimension,calendardate,datekey,reportperiod,lastupdated,accoci,assets,assetsavg,assetsc,assetsnc,assetturnover,bvps,capex,cashneq,cashnequsd,cor,consolinc,currentratio,de,debt,debtc,debtnc,debtusd,deferredrev,depamor,deposits,divyield,dps,ebit,ebitda,ebitdamargin,ebitdausd,ebitusd,ebt,eps,epsdil,epsusd,equity,equityavg,equityusd,ev,evebit,evebitda,fcf,fcfps,fxusd,gp,grossmargin,intangibles,intexp,invcap,invcapavg,inventory,investments,investmentsc,investmentsnc,liabilities,liabilitiesc,liabilitiesnc,marketcap,ncf,ncfbus,ncfcommon,ncfdebt,ncfdiv,ncff,ncfi,ncfinv,ncfo,ncfx,netinc,netinccmn,netinccmnusd,netincdis,netincnci,netmargin,opex,opinc,payables,payoutratio,pb,pe,pe1,ppnenet,prefdivis,price,ps,ps1,receivables,retearn,revenue,revenueusd,rnd,roa,roe,roic,ros,sbcomp,sgna,sharefactor,sharesbas,shareswa,shareswadil,sps,tangibles,taxassets,taxexp,taxliabilities,tbvps,workingcapital
A,ARQ,1999-12-31,2000-03-15,2000-01-31,2020-09-01,53000000,7107000000,,4982000000,2125000000,,10.219,-30000000,1368000000,1368000000,1160000000,131000000,2.41,0.584,665000000,111000000,554000000,665000000,281000000,96000000,0,0.0,0.0,202000000,298000000,0.133,298000000,202000000,202000000,0.3,0.3,0.3,4486000000,,4486000000,50960600000,,,354000000,0.806,1.0,1086000000,0.484,0,0,4337000000,,1567000000,42000000,42000000,0,2621000000,2067000000,554000000,51663600000,1368000000,-160000000,2068000000,111000000,0,1192000000,-208000000,-42000000,384000000,0,131000000,131000000,131000000,0,0,0.058,915000000,171000000,635000000,0.0,11.517,,,1408000000,0,114.3,,,1445000000,131000000,2246000000,2246000000,290000000,,,,,0,625000000,1.0,452000000,439000000,440000000,5.116,7107000000,0,71000000,113000000,16.189,2915000000
A,ARQ,2000-03-31,2000-06-12,2000-04-30,2020-09-01,-4000000,7321000000,,5057000000,2264000000,,10.27,-95000000,978000000,978000000,1261000000,166000000,2.313,0.577,98000000,98000000,0,98000000,329000000,103000000,0,0.0,0.0,256000000,359000000,0.144,359000000,256000000,256000000,0.37,0.36,0.37,4642000000,,4642000000,28969949822,,,-133000000,-0.294,1.0,1224000000,0.493,0,0,4255000000,,1622000000,0,0,0,2679000000,2186000000,493000000,29849949822,-390000000,-326000000,2000000,-13000000,0,-11000000,-341000000,95000000,-38000000,0,166000000,166000000,166000000,0,0,0.067,1010000000,214000000,572000000,0.0,6.43,,,1453000000,0,66.0,,,1826000000,297000000,2485000000,2485000000,296000000,,,,,0,714000000,1.0,452271967,452000000,457000000,5.498,7321000000,0,90000000,192000000,16.197,2871000000

Затем код отображается в новом CSV-файле следующим образом:

4290,AAPL,1998-02-09,4126000000.0,0.003,,0.171,1578000000.0
4291,AAPL,1998-05-11,3963000000.0,0.004,,0.276,1405000000.0
4292,AAPL,1998-08-10,4041000000.0,0.006999999999999999,,0.33899999999999997,1402000000.0

Затем мне нужно войти и вручную добавить заголовки столбцов, чтобы окончательный CSV (отредактированный мной) выглядел так:

index,ticker,datekey,assets,eps,pe,price,revenue
4289,AAPL,1997-12-05,4233000000.0,,-1.9380000000000002,0.141,
4290,AAPL,1998-02-09,4126000000.0,0.003,,0.171,1578000000.0
4291,AAPL,1998-05-11,3963000000.0,0.004,,0.276,1405000000.0

Как я могу заставить это работать, когда у меня есть сотни категорий данных, которые я использую, и я не могу вводить их вручную?

Почему вы используете header=False. Скорее всего, это причина, по которой имена ваших столбцов не печатаются.

sunnytown 18.12.2020 19:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
list = ['GOOG', 'AAPL', 'AMZN', 'NFLX']
first = True

for tickers in list:
    df1 = df[df.ticker == tickers]
    if first:
        df1.to_csv("20CompanyAnalysisData1.csv", mode='a', header=True)
        first = False
    else: 
        df1.to_csv("20CompanyAnalysisData1.csv", mode='a', header=False)
    continue

или более компактно

list = ['GOOG', 'AAPL', 'AMZN', 'NFLX']
needheader = True

for tickers in list:
    df1 = df[df.ticker == tickers]
    df1.to_csv("20CompanyAnalysisData1.csv", mode='a', header=neadheader)
    needheader = False
    continue

Назначьте имена столбцов перед сохранением файла (и удалите заголовок = False), как показано ниже:

list = ['GOOG', 'AAPL', 'AMZN', 'NFLX']

for tickers in list:
    df1 = df[df.ticker == tickers]
    df1.columns=['index','ticker','datekey','assets','eps','pe','price','revenue']
    df1.to_csv("20CompanyAnalysisData1.csv", mode='a')

    continue

Другие вопросы по теме