Как найти индекс символа и удалить символы после него - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь очистить данные CSV для моего проекта, которые содержат новости и ненужные вещи (например, код JavaScript).Это набор данных для нашего проекта, и моя работа состоит в том, чтобы фильтровать его и удалять ненужные символы.

Что я хочу сделать, это найти индекс символа внутри строки / столбца и, если он там есть, удалить символы после него (включая сам символ).

Я написал код для проверки индекса и могу заменить точный символ, но проблема в том, что я хочу удалить все символы после этого символа.

Я попытался реализовать библиотеку Pandasчтобы получить данные и заменить точную строку.Но, как видно из кода, он просто заменяет точный символ на пустой.Я хочу найти индекс char (скажем, «окно») и удалить символы, которые идут после символа «window» внутри строки.

import pandas as pd
import numpy as np
import csv


pathtofile = "t1.csv"
data = pd.read_csv(pathtofile, encoding='utf-8' ,index_col=0)

print(type(data)) #which gives dataframe as output
print(data.head()) #prints out [id, contetn, date]

sub = 'window._ttzi' #its char array that i'm searching using find()
data["Indexes"]= data["contetn"].str.find(sub)
print(data) #prints the csv file with additional index

data = data.replace('window._ttzi', '')

#data.to_csv("t1edited.csv", encoding = 'utf-8')
print(data)   

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я много раз искал в интернете и сам нашел ответ.

Функция rstip () панд решает то, что мне нужно.

Во-первых: мы открываем файл с помощью pathtofile = "t1.csv" data = pd.read_csv(pathtofile, encoding='utf-8' ,index_col=0), а затем для файла данных мы делим его на столбцы, а затем разрываем с помощью специального символа, например sub = 'window._ttzi'.Таким образом, код будет выглядеть как data['contetn'].str.rstrip(sub).

Я все еще буду искать другие способы удаления ненужных данных.Хорошего дня.

0 голосов
/ 12 февраля 2019

Как вы сказали в комментариях, вы хотите удалить символ из всех столбцов, чтобы вы могли "просто" проходить через каждый столбец и получать все, что появляется после вашего символа.

Так что на самом деле нетoptmized способ может быть:

# Get a list of all df's columns
columns = df.columns
# dummy array
strings = []

# here is your character, if it is a list, you'll need to adjust the loop bellow
character = 'window._ttzi'

# looping trought each column
for column in columns:
    try:
        # appends everything that will come AFTER the character. Couldn't find a way to keep the character + what's before
        # so will fix it trough another loop later
        strings.append(df[column].str.split(character).str[1].values) # the 1 means after the character
    except AttributeError:
        # column is not string / object so ignore it
        pass

Настройка списка

# flatten the array of arrays
flat_list = [item for sublist in strings for item in sublist]

# removing nan values
cleaned_list = [x for x in flat_list if str(x) != 'nan']

# Remove duplicates (set())
unique_list = list(set(cleaned_list))

Наконец, замена исходных столбцов новыми значениями, другими словами, , это приведет к удалению ненужныхданные

# since we got everything we don't want, will go trough a loop once again but
# this time we will keep everything before the string. 
# instead of the split() you could also use the .replace(string, '') here
for column in columns:
    for string in unique_list:
        try:
            df[column] = df[column].str.split(string).str[0] # the zero means before the character
        except AttributeError:
        # column is not string / object
            pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...