J'essaie de récupérer des données financières sur un site Web financier. Je veux manipuler df ['__ this value__'] . J'ai fait des recherches moi-même, et je comprends bien l'erreur, mais je ne sais vraiment pas comment la corriger. Voici à quoi ressemble mon code:
import requests
import bs4
import os
import pandas as pd
def worker_names(code=600110):
......
df = pd.DataFrame({'class': name_list})
worker_years(df)
def worker_years(df, code=600110, years=None):
if years is None:
years = ['2019', '2018', '2017', '2016']
url = 'http://quotes.money.163.com/f10/dbfx_'\
+ str(code) + '.html?date='\
+ str(years) + '-12-31,'\
+ str(years) + '-09-30#01c08'
......
df['{}-12-31'.format(years)] = number_list # this is where the problem is
df = df.drop_duplicates(subset=['class'], keep=False)
df.to_csv(".\\__fundamentals__\\{:0>6}.csv".format(code),
index=False, encoding='GBK')
print(df)
if __name__ == '__main__':
pd.set_option('display.max_columns', None)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
fundamental_path = '.\\__fundamentals__'
stock_path = '.\\__stock__'
worker_names(code=600110)
Y a-t-il des moyens de contourner le problème? s'il vous plaît aidez! THX TOUS! PS pour les codes complets, j'ai fourni dans la section réponse. désolé pour les inconvénients.
3 Réponses :
import requests
import bs4
import os
import pandas as pd
def worker_names(code):
url = 'http://quotes.money.163.com/f10/dbfx_'\
+ str(code) + '.html?date=2019-12-31,2019-09-30#01c08'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
response = requests.get(url, headers=headers).content
soup = bs4.BeautifulSoup(response, 'html5lib')
DuPond_name = soup.find_all(name='td', attrs={'class': 'dbbg01'})
name_list = []
for i, names in enumerate(DuPond_name, 1):
name = names.getText()
name_list.append(name)
df = pd.DataFrame({'class': name_list})
worker_years(code, df)
def worker_years(df, code, years=None):
if years is None:
years = ['2019', '2018', '2017', '2016']
url = 'http://quotes.money.163.com/f10/dbfx_'\
+ str(code) + '.html?date='\
+ str(years) + '-12-31,'\
+ str(years) + '-09-30#01c08'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
response = requests.get(url, headers=headers).content
soup = bs4.BeautifulSoup(response, 'html5lib')
DuPond_number = soup.find_all(name='td', attrs={'class': 'dbbg02'})
number_list = []
for i, numbers in enumerate(DuPond_number, 1):
number = numbers.getText()
number_list.append(number)
# print(number_list)
df['{}-12-31'.format(years)] = number_list # this is where the problem is
df = df.drop_duplicates(subset=['class'], keep=False)
df.to_csv(".\\__fundamentals__\\{:0>6}.csv".format(code),
index=False, encoding='GBK')
print(df)
if __name__ == '__main__':
pd.set_option('display.max_columns', None)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
for root, dirs, files in os.walk('.\\__stock__'):
for csv in files:
if csv.endswith('.csv'):
path = csv
prefix = os.path.splitext(path)
print(prefix[0])
worker_names(prefix[0])
vos codes df ['{} - 12-31'.format (years)] = number_list montrent un très bon exemple de vous ne pouvez pas créer 2 variables des deux côtés de l'équation. Essayez ceci:
df_year = pd.DataFrame({'{}'.format(year): number_list})
df = pd.concat([df, df_year], axis=1)
contourner avec dataframe, il existe de nombreuses façons d'obtenir le même résultat.
merci, je vais essayer plus tard, et voir comment je dois manipuler mes codes.
Je veux vraiment mettre plus de codes dans mon post, mais il semble que j'en ai mis trop, alors j'ai raccourci un peu. J'espère que vous pouvez comprendre ma situation.
où avez-vous déclaré str var dans votre code? et pourquoi vous utilisez est une fonction? str (code) ...? veuillez nous donner plus de données sur str var où vous l'avez déclaré ... est-ce une fonction ou juste un tableau?
Je l'ai déclaré où
years = ['2019', '2018', '2017', '2016'], je veux nommer mon df [col] avec des années, respectivement. @ZINEMahmoudvotre str (code) str (année) ... n'a aucun sens pour votre code? .... qu'est-ce que str dans votre code? c'était ma question? est-ce une fonction ou une var? vous ne pouvez pas simplement le définir sans le définir
permettez-moi d'afficher tous mes codes dans la section réponse. @ZINEMahmoud
'str' est toujours indéfini monsieur
Il semble que je ne comprends pas tout à fait par «str» n'est pas défini. ma capacité de codage est encore assez amatrice. pouvez-vous me donner quelques indices? @ZINEMahmoud
veux-tu dire que je devrais avoir quelque chose comme ça?
pour i, année en énumération (années, 1)? @ZINEMahmoudcontinuons cette discussion dans le chat .