Я предлагаю вам загружать данные во временную таблицу, а затем использовать INSERT ... SELECT ... ON DUPLICATE KEY UPDATE
; например:
CREATE TEMPORARY TABLE temptable (
id INT UNSIGNED NOT NULL,
val INT,
PRIMARY KEY (id)
) ENGINE = MEMORY;
LOAD DATA LOCAL INFILE '/path/to/file.txt' INTO temptable FIELDS TERMINATED BY ',';
INSERT INTO my_table
SELECT id, val FROM temptable
ON DUPLICATE KEY UPDATE val = VALUES(val);
DROP TEMPORARY TABLE temptable;
import pandas as pd
k=pd.DataFrame(['hello','doubt','hero','help'])
k.columns=['some_thing']
t=k[k['some_thing'].str.contains("hel")]
d=k.replace(t,'CS')
::: OUTPUT :::
k
Out[95]:
some_thing
0 hello
1 doubt
2 hero
3 help
t
Out[99]:
some_thing
0 hello
3 help
d
Out[96]:
some_thing
0 CS
1 doubt
2 hero
3 CS
Быстрое примечание: если вы хотите сделать выбор на основе частичной строки, содержащейся в индексе, попробуйте следующее:
df['stridx']=df.index
df[df['stridx'].str.contains("Hello|Britain")]
Вот что я сделал для частичных совпадений строк. Если у кого-то есть более эффективный способ сделать это, пожалуйста, дайте мне знать.
def stringSearchColumn_DataFrame(df, colName, regex):
newdf = DataFrame()
for idx, record in df[colName].iteritems():
if re.search(regex, record):
newdf = concat([df[df[colName] == record], newdf], ignore_index=True)
return newdf
Основываясь на проблеме github # 620 , похоже, что вы скоро сможете сделать следующее:
df[df['A'].str.contains("hello")]
Обновление: векторизованные строковые методы ( т.е. Series.str) доступны в pandas 0.8.1 и выше.
df[df['A'].str.contains("Hello|Britain")]
– Garrett
27 June 2013 в 20:20
df[df['value'].astype(str).str.contains('1234.+')]
для фильтрации столбцов без строкового типа.
– François Leblanc
13 February 2018 в 21:22
Как вы отфильтровываете «свободу», кроме как с такими критериями, как «наследие», «ulic» и т. д.
df_Fixed[~df_Fixed["Busler Group"].map(lambda x: x.startswith('Liberty'))]
Скажите, что у вас есть DataFrame
:
>>> df = pd.DataFrame([['hello', 'hello world'], ['abcd', 'defg']], columns=['a','b'])
>>> df
a b
0 hello hello world
1 abcd defg
Вы всегда можете использовать оператор in
в выражении лямбда для создания вашего фильтра.
>>> df.apply(lambda x: x['a'] in x['b'], axis=1)
0 True
1 False
dtype: bool
Трюк здесь состоит в том, чтобы использовать опцию axis=1
в apply
для передачи элементов в функцию лямбда по строке, в отличие от столбца по столбцу.
Я использую pandas 0.14.1 на macos в ноутбуке ipython. Я попробовал предложенную строку выше:
df[df['A'].str.contains("Hello|Britain")]
и получил ошибку:
"cannot index with vector containing NA / NaN values"
, но она отлично работала, когда было добавлено условие «== Истина», например:
df[df['A'].str.contains("Hello|Britain")==True]
Если кто-нибудь задается вопросом, как выполнить связанную проблему: «Выбрать столбец частичной строкой»
Использовать:
df.filter(like='hello') # select columns which contain the word hello
И выбирать строки путем частичного совпадения строк, передать axis=0
для фильтрации:
# selects rows which contain the word hello in their index label
df.filter(like='hello', axis=0)