人に関する情報と100列を超えるあらゆる種類のデータを含むCSVファイルがあります。ヘッダーはありません。私の主な目的は、人々の名前だけを取得することです。それに関連する他のデータではありません。これどうやってするの?
これは私のCSVファイルです--- 'data.csv':
John 12 34 23 48 14 44 94 24 ... #extends till 100
Becky 23 40 93 47 84 43 64 31 ... #extends till 100
Lio 63 90 53 77 14 12 69 20 ... #extends till 100
これに続いて、たくさんの名前が入力されたリストがコードにあるとしましょう。
names = ['Timothy', 'Joshua', 'Rio', 'Catherine', 'Poorva', 'Gome', 'Lachlan', 'John', 'Lio']
私はCSVファイルをPythonで開き、リスト内包表記を使用して、最初の列のすべての名前を読み取り、変数「people_list」が割り当てられたリストに保存しました。
ここで、people_list内のすべての要素について、その要素が「names」リストに表示されていない場合、CSVファイル内のその要素を削除したいと思います。この例では、ベッキーが名前リストに表示されていないため、ベッキーを削除します。これは私がこれまでに試したことです...
デモ-data.py:
names = ['Timothy', 'Joshua', 'Rio', 'Catherine', 'Poorva', 'Gome', 'Lachlan', 'John', 'Lio']
csv_filename = data.csv
with open(csv_filename, 'r') as readfile:
reader = csv.reader(readfile, delimiter=',')
people_list = [row[0] for row in reader]
for person in people_list:
if person not in names:
id = people_list.index(person) #grab the index of the person in people_list who's not found in the names list.
#using pandas
df = pd.read_csv(csv_filename) #read data.csv file
df.drop(df.index[id], in_place = True) #delete the row id for the person who does not exist in names list.
df.to_csv(csv_filename, index = False, sep=',') #close the csv file with no index
else:
print("This person is found in the names list")
Beckyを削除する代わりに、CSVファイル内のすべてのレコード(Beckyを含む)が削除されました。誰かがこれを行う方法を説明できますか?
デフォルトの列のパラメータheader=None
を追加...:read_csv
0,1,2
df = pd.read_csv(csv_filename, header=None)
names = ['Timothy', 'Joshua', 'Rio', 'Catherine', 'Poorva', 'Gome', 'Lachlan', 'John', 'Lio']
次に、最初の列を選択しdf[0]
、メンバーシップをテストしてSeries.isin
、次のようにフィルタリングしboolean indexing
ます。
df = df[df[0].isin(names)]
print (df)
ファイルへの最後の書き込み:
df.to_csv(csv_filename1, index = False, header=None)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加