import pandas as pd

# load the data
data = pd.read_csv("csv_name.csv")

# get first lines of data

# get useful info regarding datased

# change print options of pandas

# fill not existing variabels in column with median
data['Age'] = data["Age"].fillna(data["Age"].median())

# select all 'male' records from the "Sex" column
data.loc[data["Sex"] == "male", "Sex"]

# replace all values with 0
data.loc[data["Sex"] == "male", "Sex"] = 0
data.loc[bool_mask, "column_to_fetch"] = value

# get unique values from column

# select only required rows
data[["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]]

# count values in data frame
# get how many "True" entries exist in data frame

# another way to count data from list
titles = titanic["Name"].apply(get_title)

# generate new column from previous one
titanic["FamilySize"] = titanic["SibSp"] + titanic["Parch"]

# generate new column with .apply method
# The .apply method generates a new series
titanic["NameLength"] = titanic["Name"].apply(lambda x: len(x))

# filter dataframe based on series
df = df[df.filename.isin(df_clear.filename)]

# but sometimes more useful to apply method "by hands"
# we have nearly the same perfomance, but more verbose output
# previously you should install "tqdm"
result_array = []
for i in tqdm(xrange(0, len(data["column_name"]))):
    new_data = some_function( data["column_name"][i] )

# skip rows during data loading
test_set = pd.read_csv('',
                      skiprows = 1, header = None)

# add names for colums
column_labels = ['first', 'second', 'title']
test_set.columns = column_labels

# remove all rows contains '?' question mark
train_set.replace(' ?', np.nan).dropna()

# replace one value by another in column
test_nomissing['wage_class'] = test_nomissing.wage_class.replace({' <=50K.': ' <=50K', ' >50K.':' >50K'})

# concatenate two datasets vertically
combined_set = pd.concat([train_nomissing, test_nomissing], axis = 0)

# replace every sting value to the integer
# Loop through all columns in the dataframe
for feature in combined_set.columns:
    # Only apply for columns with categorical strings
    if combined_set[feature].dtype == 'object':
        # Replace strings with an integer
        combined_set[feature] = pd.Categorical(combined_set[feature]).codes

# create pandas data frame from data and save it
# assume that data - nested list of lists, when each nested list - values for one line
columns = ['word_1', 'word_2', 'target_similarity', 'calculated_similarity']
df = pd.DataFrame(data=data, columns=columns)
df = pd.DataFrame(data=csv_lines, columns=columns)
df.to_csv(save_file_name, index=False, header=True)

# create new dataframe if not exists or use existing one
# csv_columns = list of names for columns
# csv_data = dict with keys same as columns names
if os.path.exists(csv_f_name):
    main_csv = pd.read_csv(csv_f_name, index_col=0)
    main_csv = pd.DataFrame(columns=csv_columns)
main_csv = main_csv.append(csv_data, ignore_index=True)
main_csv.to_csv(csv_f_name, index=True, header=True, na_rep='NaN')

# convert sting list to python list
from ast import literal_eval
literal_eval('[1.23, 2.34]')
[1.23, 2.34]