Ich habe Code, der userID
, categoryID
und date
als Eingabewerte hat. Ich möchte überprüfen, ob die Einträge gültig sind, z. wenn die userID
sogar in meinem Dataset vorhanden ist. Es funktioniert so, wie ich es mache, aber ich muss ein paar Sekunden (!) Warten, bis das Hauptprogramm ausgeführt wird.Wie man "value is in dateframe column" schneller macht
var_uid = int(input("Please enter a user ID: "))
var_catid = input("Please enter a category ID: ")
var_date = input("Please enter a date to restrict the considered data (YYYY-MM-DD): ")
if (~var_uid in df_data['UserID'].values) :
print("There is no such user with this UserID. Please enter a different UserID.")
elif (~df_data['CategoryID'].str.contains(var_catid).any()) :
print("There is no such category with this CategoryID. Please enter a different CategoryID")
else:
### I convert my date to datetime object to be able to do some operations with it. ###
date = pd.to_datetime(var_date)
s_all = df_data[df_data.columns[7]]
s_all_datetime = pd.to_datetime(s_all)
df_data['UTCtime'] = s_all_datetime
min_date_str = "2012-04-03"
min_date = pd.to_datetime(min_date_str)
max_date_str = "2013-02-16"
max_date = pd.to_datetime(max_date_str)
if (date < min_date or date > max_date) :
print("There is noch such date. Please enter a different date from 2012-04-03 until 2013-02-16")
else:
some code
Ich weiß, Stackoverflow ist nicht für die Arbeit und in der Tat funktioniert mein Code. Könnten Sie doch zumindest ein paar Tipps geben, was schnellere Implementierungen wären? Der Datenrahmen hat 230k Zeilen und es ist natürlich nicht der beste Weg, wenn mein Programm mit jeder if-Klausel darüber laufen muss.
Ich dachte, ich könnte z. die eindeutigen Werte meiner UserID
Spalte, speichern Sie es in einer Liste und überprüfen Sie es mit meiner if-Klausel. Aber
df_data['UserID'].unique.tolist()
funktioniert nicht.
Danke für jede Hilfe.
/EDIT: Hier ist df_data.info()
und df_data.head()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 227428 entries, 0 to 227427
Data columns (total 8 columns):
UserID 227428 non-null int64
VenueID 227428 non-null object
CategoryID 227428 non-null object
CategoryName 227428 non-null object
Latitude 227428 non-null float64
Longitude 227428 non-null float64
TimezoneOffset 227428 non-null int64
UTCtime 227428 non-null object
dtypes: float64(2), int64(2), object(4)
memory usage: 13.9+ MB
None
Kopf:
UserID VenueID CategoryID CategoryName Latitude Longitude TimezoneOffset UTCtime
0 470 49bbd6c0f964a520f4531fe3 4bf58dd8d48988d127951735 Arts & Crafts Store 40.719810 -74.002581 -240 Tue Apr 03 18:00:09 +0000 2012
1 979 4a43c0aef964a520c6a61fe3 4bf58dd8d48988d1df941735 Bridge 40.606800 -74.044170 -240 Tue Apr 03 18:00:25 +0000 2012
2 69 4c5cc7b485a1e21e00d35711 4bf58dd8d48988d103941735 Home (private) 40.716162 -73.883070 -240 Tue Apr 03 18:02:24 +0000 2012
3 395 4bc7086715a7ef3bef9878da 4bf58dd8d48988d104941735 Medical Center 40.745164 -73.982519 -240 Tue Apr 03 18:02:41 +0000 2012
4 87 4cf2c5321d18a143951b5cec 4bf58dd8d48988d1cb941735 Food Truck 40.740104 -73.989658 -240 Tue Apr 03 18:03:00 +0000 2012
Könnten Sie vielleicht 'df_data.info()' und 'df.head()' posten, um das Beispiel der Quelldaten zu sehen? – aldanor
Sie können es einfach so überprüfen 'df_data [(df_data ['UserID'] == var_uid) & (df_data ['KategorieID'] == var_catid)]' – MaxU
Danke für die Antwort. Aber wenn ich '' if (df_data [(df_data ['UserID']! = Var_uid)]) schreibe: '' Ich bekomme einen Fehler wegen mehrdeutiger Wahrheitswerte. – Paprikamann