Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
395 views
in Technique[技术] by (71.8m points)

pandas - Python KeyError when Comparing two DataFrames

I have extracted data from a CSV file and want to use it update values in a spreadsheet. The dataframe has a column 'ticker' of values. I want to check the existing values in the spreadsheet, and if the CSV has a new value add the new value to the spreadsheet.

if df_xls.empty:
    df_xls = df_xls.append(pd.DataFrame({"ticker": [[reduced.ticker[0]]]}), ignore_index=True)
wtw = 1

print(reduced.columns.values)
print(df_xls.columns.values)

for csv_row in reduced:
    for xls_row in df_xls:
        if reduced.ticker[csv_row] == df_xls.ticker[xls_row]:
            wtw = 0
            break
        else:
            next(xls_row)
if wtw == 1:
     df_xls = df_xls.append(pd.DataFrame({"ticker": [[reduced.ticker[csv_row]]]}), ignore_index=True)
next(csv_row)

I am getting a "KeyError: 'ticker'" in reference to the line "if reduced.ticker[csv_row] == df_xls.ticker[xls_row]:" I don't understand the error given the column names are correct. The print outputs above display:

['ticker' '2021-02-01 shares' '2021-02-01 value']
['ticker']

Thanks in advance.

Edit --

I do not have the code available at a URL, but here is the entirety of the script:

import numpy as np
import pandas as pd

filename = "2021-02-01-FULLREPORT.csv"

##load new information from CSV into dataframe##
df_csv = pd.read_csv(filename)
prefix = filename[0:10]

ticker = df_csv.ticker
shares = df_csv.shares
value = df_csv["market value($)"]

reduced = pd.DataFrame({
    "ticker": ticker,
    prefix +" shares": shares,
    prefix +" value": value
})
##end load new information from CSV into dataframe##

##load excel
from pandas import ExcelWriter
from pandas import ExcelFile
df_xls = pd.read_excel('file.xlsx')

##update ticker list with information saved in reduced##

if df_xls.empty:
    df_xls = df_xls.append(pd.DataFrame({"ticker": [[reduced.ticker[0]]]}), ignore_index=True)
wtw = 1

print(reduced.columns.values)
print(df_xls.columns.values)

for csv_row in reduced:
    for xls_row in df_xls:
        if reduced.ticker[csv_row] == df_xls.ticker[xls_row]:
            wtw = 0
            break
        else:
            next(xls_row)
if wtw == 1:
     df_xls = df_xls.append(pd.DataFrame({"ticker": [[reduced.ticker[csv_row]]]}), ignore_index=True)
next(csv_row)

print (df_xls)

This resolved the KeyError:

##load excel
from pandas import ExcelWriter
from pandas import ExcelFile
df_xls = pd.read_excel('file.xlsx')

##update ticker list saved in reduced##

for csv_row in reduced.index:
    wtw = 1
    print ("testing " + reduced.ticker[csv_row])
    for xls_row in df_xls.index:
        print ("comparing "+ reduced.ticker[csv_row] + "with ")
        print (df_xls.ticker[xls_row])
        if reduced.ticker[csv_row] == df_xls.ticker[xls_row]:
            print ("match found")
            wtw = 0
            break
    if wtw == 1:
        df_xls = df_xls.append(pd.DataFrame({"ticker": [[reduced.ticker[csv_row]]]}), ignore_index=True)

print (df_xls)
question from:https://stackoverflow.com/questions/66055779/python-keyerror-when-comparing-two-dataframes

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...