Ich habe versucht Sprachverarbeitung 100 Knock 2020. Sie können den Link anderer Kapitel von hier und den Quellcode von hier sehen. (Die Bestätigung unter UNIX wurde nicht überprüft.)
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
010.py
path = "popular-names.txt"
with open(path) as file:
print(len(file.readlines()))
# -> 2700
Ich habe den "with" -Block verwendet, weil es mühsam war, "close ()" am Ende der Dateioperation zu schreiben.
Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
011.py
path = "popular-names.txt"
with open(path) as file:
print(file.read().replace("\t", " "), end="")
# -> Mary F 7065 1880
# Anna F 2604 1880
# Emma F 2003 1880 ...
Speichern Sie nur die erste Spalte jeder Zeile als col1.txt und die zweite Spalte als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
012.py
path = "popular-names.txt"
path_col1 = "col1_012.txt"
path_col2 = "col2_012.txt"
with open(path) as file:
with open(path_col1, mode="w") as col1:
with open(path_col2, mode="w") as col2:
item_split = [item.split("\t") for item in file.readlines()]
for item in item_split:
col1.write(item[0] + "\n")
col2.write(item[1] + "\n")
# col1.txt
# -> Mary
# Anna...
# col2.txt
# -> F
# F...
Der Betrieb der Datei wird durch "mode" von "open ()" angegeben. Der Standardwert ist mode = 'r'
, aber Sie sollten es richtig schreiben, ohne es wegzulassen ...?
Kombinieren Sie col1.txt und col2.txt, die in> 12 erstellt wurden, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
013.py
path_col1 = "col1_012.txt"
path_col2 = "col2_012.txt"
path_merge = "merge.txt"
with open(path_col1) as col1:
col1_list = col1.readlines()
with open(path_col2) as col2:
col2_list = col2.readlines()
with open(path_merge, mode="w") as mrg:
for i in range(len(col1_list)):
mrg.write(col1_list[i].replace("\n", "") + "\t" + col2_list[i])
# merge.txt
# -> Mary F
# Anna F
# Emma F
Die Antwort der anderen Person verwendete "zip ()", um sie zu generieren. Mit dieser Antwort werden Sie in Schwierigkeiten geraten, wenn "len (col1_list)> len (col2_list)", und das ist schlauer.
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
014.py
import sys
N = int(sys.argv[2])
with open(sys.argv[1]) as file:
for i in range(N):
print(file.readline().replace("\n",""))
# python 014.py popular-names.txt 3
# -> Mary F 7065 1880
# Anna F 2604 1880
# Emma F 2003 1880
Es scheint, dass Sie eine Liste mit Befehlszeilenargumenten erhalten können, indem Sie die Funktion argv
des Moduls sys
verwenden.
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.
015.py
import pandas as pd
path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df.tail())
# -> 0 1 2 3
# 2775 Benjamin M 13381 2018
# 2776 Elijah M 12886 2018
# 2777 Lucas M 12585 2018
# 2778 Mason M 12435 2018
# 2779 Logan M 12352 2018
Für diejenigen, die es kennen, scheint es neu zu sein, aber es scheint, dass es eine Bibliothek namens pandas gibt, die für die Datenverarbeitung geeignet ist, also habe ich versucht, sie zu verwenden.
read_csv (path, sep =" \ t ")
war in Ordnung, aber read_table
ist einfach, nicht wahr?
Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.
016.py
import pandas as pd
import sys
N = int(sys.argv[1])
path = "popular-names.txt"
df = pd.read_table(path, header=None)
col_n = -(-len(df) // N)
for i in range(N):
print(df.iloc[col_n * i : col_n * (i + 1), :])
# python 016.py 2
# -> 0 1 2 3
# 0 Mary F 7065 1880
# 1 Anna F 2604 1880
# ... ... .. ... ...
# 1389 Sharon F 25711 1949
#
# [1390 rows x 4 columns]
# 0 1 2 3
# 1390 James M 86857 1949
# 1391 Robert M 83872 1949
# ... ... .. ... ...
# 2779 Logan M 12352 2018
#
# [1390 rows x 4 columns]
Für die Ausgabe habe ich "iloc" verwendet, weil ich mehrere Zeilen von "df" nach Index angeben möchte.
Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle cut, sort und uniq.
017.py
import pandas as pd
path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df[0].unique())
# -> ['Mary' 'Anna' 'Emma' 'Elizabeth' 'Minnie' 'Margaret' 'Ida' 'Alice'...
unique ()
gibt den Wert eines eindeutigen Elements als NumPys ndarray
-Typ zurück.
Die Anzahl der eindeutigen Elemente kann durch "df [0] .nunique ()" zusätzlich zu "len (df [0] .unique ())" erhalten werden.
Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Ordnen Sie den Inhalt jeder Zeile neu an, ohne ihn zu ändern). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).
018.py
import pandas as pd
path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df.sort_values(2, ascending=False))
# -> 0 1 2 3
# 1340 Linda F 99689 1947
# 1360 Linda F 96211 1948
# 1350 James M 94757 1947...
Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq und sort.
019.py
import pandas as pd
path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df[0].value_counts())
# -> James 118
# William 111
# John 108
value_counts
gibt eindeutige Elemente und deren Nummer als pandas.Series
Typ aus.
Es ist verwirrend, dass "unique ()" die Liste der eindeutigen Elemente anzeigt, "nunique ()" die Gesamtzahl der eindeutigen Elemente anzeigt und "value_counts ()" die Häufigkeit des Auftretens jedes Elements anzeigt.
Pandas grundlegende Operation, die häufig in der Datenanalyse verwendet wird upura / nlp100v2020 Löse "100 Language Processing Knock 2020" mit Python Zusammenfassung der Amateur-Sprachverarbeitung mit 100 Klopfen
Recommended Posts